Elizabeth's proactive approach involves introducing urinal toilet attachment , an ingenious concept that optimizes space and functionality.

basicInformationAnalysis.vue 56KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540
  1. <template>
  2. <div class="main-contain">
  3. <div class="position">
  4. <bread-crumb :crumbs="crumbs"></bread-crumb>
  5. </div>
  6. <div class="app-container">
  7. <div class="cell clearfix">
  8. <label class="title">
  9. <span class="name">日期查询</span> :
  10. </label>
  11. <div class="time">
  12. <ul class>
  13. <li
  14. :class="item.state == stateType ? 'active' : ''"
  15. @click="selectLapseTo(item.state)"
  16. v-for="item in month"
  17. :key="item.value"
  18. >{{ item.label }}</li>
  19. </ul>
  20. </div>
  21. </div>
  22. <div class="cell clearfix">
  23. <label class="title">
  24. <span class="name">查看范围</span> :
  25. </label>
  26. <div class="time">
  27. <ul class>
  28. <li
  29. :class="item.state == way ? 'active' : ''"
  30. @click="selectWay(item.state)"
  31. v-for="item in wayArr"
  32. :key="item.value"
  33. >{{ item.label }}</li>
  34. </ul>
  35. </div>
  36. </div>
  37. <div class="cell clearfix">
  38. <label class="title">
  39. <span class="name">日期查询</span> :
  40. </label>
  41. <el-date-picker
  42. v-model="listQuery.start_time"
  43. prefix-icon="el-icon-date"
  44. @change="changeTime"
  45. :editable="false"
  46. style="width: 196px;"
  47. type="date"
  48. placeholder="选择日期时间"
  49. align="right"
  50. format="yyyy-MM-dd"
  51. value-format="yyyy-MM-dd"
  52. :picker-options="pickerOptions"
  53. ></el-date-picker>
  54. <span class>-</span>
  55. <el-date-picker
  56. v-model="listQuery.end_time"
  57. prefix-icon="el-icon-date"
  58. @change="changeEndTime"
  59. :editable="false"
  60. style="width: 196px;"
  61. type="date"
  62. placeholder="选择日期时间"
  63. align="right"
  64. format="yyyy-MM-dd"
  65. value-format="yyyy-MM-dd"
  66. :picker-options="pickerOptions"
  67. ></el-date-picker>
  68. </div>
  69. <div class="cell clearfix">
  70. <label class="title"><span class="name">转归情况</span> : </label>
  71. <div class="time ">
  72. <ul class="">
  73. <li
  74. :class="item.lapseto == lapsetoType ? 'active' : ''"
  75. @click="selectLapseOne(item.lapseto)"
  76. v-for="item in lapsetoArr"
  77. :key="item.value"
  78. >
  79. {{ item.label }}
  80. </li>
  81. </ul>
  82. </div>
  83. </div>
  84. <div class="cell clearfix">
  85. <label class="title"><span class="name">病人来源</span> : </label>
  86. <div class="time ">
  87. <ul class="">
  88. <li
  89. :class="item.source == sourceType ? 'active' : ''"
  90. @click="selectSource(item.source)"
  91. v-for="item in sourceArr"
  92. :key="item.value"
  93. >
  94. {{ item.label }}
  95. </li>
  96. </ul>
  97. </div>
  98. </div>
  99. <div class="cell clearfix" v-show="treatShow">
  100. <label class="title">
  101. <span class="name">透析模式</span> :
  102. </label>
  103. <div class="time">
  104. <ul class>
  105. <li
  106. :class="item.state == stateMode ? 'active' : ''"
  107. @click="selectTreatMode(item.state)"
  108. v-for="item in treatmentMode"
  109. :key="item.mode_id"
  110. >{{ item.name }}</li>
  111. </ul>
  112. </div>
  113. </div>
  114. <div v-if="way == 0" class="cell clearfix" style="align-items:normal">
  115. <div style="float:left">
  116. <div class="infoBox" style="width:370px;">
  117. <div class="infoOne">
  118. <div class="titleBox">
  119. <span class="point"></span>
  120. <p class="infoTitle">透析总量({{total}}次)</p>
  121. </div>
  122. <div class="borderBox">
  123. <div v-for="(item,index) in modetype" :key="index">
  124. <span v-if="item.mode_id == 'HD'">
  125. <p>HD:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  126. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  127. </span>
  128. <span v-if="item.mode_id == 'HDF'">
  129. <p>HDF:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  130. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  131. </span>
  132. <span v-if="item.mode_id == 'HD+HP'">
  133. <p>HD+HP:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  134. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  135. </span>
  136. <span v-if="item.mode_id == 'HP'">
  137. <p>HP:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  138. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  139. </span>
  140. <span v-if="item.mode_id == 'HF'">
  141. <p>HF:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  142. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  143. </span>
  144. <span v-if="item.mode_id == 'SCUF'">
  145. <p>SCUF:{{item.count}}次({{(item.count/total*100).toFixed(1)}}%)</p>
  146. <el-progress :percentage="(item.count/total*100).toFixed(1)"></el-progress>
  147. </span>
  148. <span v-if="item.mode_id == 'IUF'">
  149. <p>IUF:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  150. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  151. </span>
  152. <span v-if="item.mode_id == 'HFHD'">
  153. <p>HFHD:{{item.count}}次({{(item.count/total*100).toFixed(1)}}%)</p>
  154. <el-progress :percentage="(item.count/total*100).toFixed(1)"></el-progress>
  155. </span>
  156. <span v-if="item.mode_id == 'HFHD+HP'">
  157. <p>HFHD+HP:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  158. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  159. </span>
  160. <span v-if="item.mode_id == 'PHF'">
  161. <p>PHF:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  162. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  163. </span>
  164. <span v-if="item.mode_id == 'HFR'">
  165. <p>HFR:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  166. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  167. </span>
  168. <span v-if="item.mode_id == 'HDF+HP'">
  169. <p>HDF+HP:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  170. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  171. </span>
  172. <span v-if="item.mode_id == 'HFHD+HP'">
  173. <p>HFHD+HP:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  174. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  175. </span>
  176. <span v-if="item.mode_id == '腹水回输'">
  177. <p>腹水回输:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  178. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  179. </span>
  180. <span v-if="item.mode_id == 'HD前置换'">
  181. <p>HD前置换:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  182. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  183. </span>
  184. <span v-if="item.mode_id == 'HD后置换'">
  185. <p>HD后置换:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  186. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  187. </span>
  188. <span v-if="item.mode_id == 'HDF前置换'">
  189. <p>HDF前置换:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  190. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  191. </span>
  192. <span v-if="item.mode_id == 'HDF后置换'">
  193. <p>HDF后置换:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  194. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  195. </span>
  196. <span v-if="item.mode_id == 'IUF+HD'">
  197. <p>IUF+HD:{{item.count}}次({{(item.count/total*100).toFixed(1)}}%)</p>
  198. <el-progress :percentage="(item.count/total*100).toFixed(1)"></el-progress>
  199. </span>
  200. <span v-if="item.mode_id == 'IU'">
  201. <p>IU:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  202. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  203. </span>
  204. <span v-if="item.mode_id == 'HD+'">
  205. <p>HD+:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  206. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  207. </span>
  208. <span v-if="item.mode_id == '血浆胆红素吸附+HDF'">
  209. <p>血浆胆红素吸附+HDF:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  210. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  211. </span>
  212. <span v-if="item.mode_id == '血浆胆红素吸附'">
  213. <p>血浆胆红素吸附:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  214. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  215. </span>
  216. <span v-if="item.mode_id == 'I-HDF'">
  217. <p>I-HDF:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  218. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  219. </span>
  220. <span v-if="item.mode_id == 'HD高通'">
  221. <p>HD高通:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  222. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  223. </span>
  224. <span v-if="item.mode_id == 'CVVH'">
  225. <p>CVVH:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  226. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  227. </span>
  228. <span v-if="item.mode_id == 'CVVHD'">
  229. <p>CVVHD:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  230. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  231. </span>
  232. <span v-if="item.mode_id == 'CVVHDF'">
  233. <p>CVVHDF:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  234. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  235. </span>
  236. <span v-if="item.mode_id == '未知'">
  237. <p>未知:{{item.count}}次({{(item.count/total*100).toFixed(2)}}%)</p>
  238. <el-progress :percentage="(item.count/total*100).toFixed(2)"></el-progress>
  239. </span>
  240. </div>
  241. </div>
  242. </div>
  243. <div class="infoOne">
  244. <div class="titleBox">
  245. <span class="point2"></span>
  246. <p class="infoTitle">传染病统计</p>
  247. </div>
  248. <div class="borderBox2">
  249. <div v-for="(item,i) in this.InfectiousList" :key="i">
  250. <span v-if="item.disease_id == 2">
  251. <p>乙肝:{{item.count}}人({{(item.count/InfectiousTotal*100).toFixed(1)}}%)</p>
  252. <el-progress :percentage="(item.count/InfectiousTotal*100).toFixed(1)"></el-progress>
  253. </span>
  254. <span v-if="item.disease_id == 3">
  255. <p>丙肝:{{item.count}}人({{(item.count/InfectiousTotal*100).toFixed(1)}}%)</p>
  256. <el-progress :percentage="(item.count/InfectiousTotal*100).toFixed(1)"></el-progress>
  257. </span>
  258. <span v-if="item.disease_id == 4">
  259. <p>艾滋病:{{item.count}}人({{(item.count/InfectiousTotal*100).toFixed(1)}}%)</p>
  260. <el-progress :percentage="(item.count/InfectiousTotal*100).toFixed(1)"></el-progress>
  261. </span>
  262. <span v-if="item.disease_id == 5">
  263. <p>肺结核:{{item.count}}人({{(item.count/InfectiousTotal*100).toFixed(1)}}%)</p>
  264. <el-progress :percentage="(item.count/InfectiousTotal*100).toFixed(1)"></el-progress>
  265. </span>
  266. <span v-if="item.disease_id == 6">
  267. <p>梅毒:{{item.count}}人({{(item.count/InfectiousTotal*100).toFixed(1)}}%)</p>
  268. <el-progress :percentage="(item.count/InfectiousTotal*100).toFixed(1)"></el-progress>
  269. </span>
  270. <span v-if="item.disease_id == 1">
  271. <p>其他:{{item.count}}人({{((item.count)/InfectiousTotal*100).toFixed(1)}}%)</p>
  272. <el-progress :percentage="((item.count)/InfectiousTotal*100).toFixed(1)"></el-progress>
  273. </span>
  274. </div>
  275. </div>
  276. </div>
  277. </div>
  278. </div>
  279. <div style="float:left">
  280. <div class="infoBox">
  281. <div class="infoOne">
  282. <div class="titleBox">
  283. <span class="point1"></span>
  284. <p class="infoTitle">转归统计(总人数{{patientCount}}人)</p>
  285. </div>
  286. <div class="borderBox1">
  287. <span v-if="lapsetoType == 0 || lapsetoType == 1"><p>留治:{{rollOutTotal}}人({{(rollOutTotal/patientCount*100).toFixed(1)}}%)</p>
  288. <el-progress :percentage="(rollOutTotal/patientCount*100).toFixed(1)"></el-progress>
  289. </span>
  290. <span v-if="lapsetoType == 0 || lapsetoType == 2"><p>转出:{{outTotal}}人({{(outTotal/patientCount*100).toFixed(1)}}%)</p>
  291. <el-progress :percentage="(outTotal/patientCount*100).toFixed(1)"></el-progress>
  292. </span>
  293. </div>
  294. </div>
  295. <div class="infoOne">
  296. <div class="titleBox">
  297. <span class="point2"></span>
  298. <p class="infoTitle">男女比例</p>
  299. </div>
  300. <div class="borderBox2">
  301. <p>男:{{totalMan}}人({{(totalMan/totalGender*100).toFixed(1)}}%)</p>
  302. <el-progress :percentage="(totalMan/totalGender*100).toFixed(1)"></el-progress>
  303. <p>女:{{totalWoman}}人({{(totalWoman/totalGender*100).toFixed(1)}}%)</p>
  304. <el-progress :percentage="(totalWoman/totalGender*100).toFixed(1)"></el-progress>
  305. </div>
  306. </div>
  307. <div class="infoOne">
  308. <div class="titleBox">
  309. <span class="point"></span>
  310. <p class="infoTitle">年龄统计</p>
  311. </div>
  312. <div class="borderBox">
  313. <div v-for="(item,j) in ageCount" :key="j">
  314. <span v-if="item.age == 20">
  315. <p>年龄≤20:{{item.count}}人({{(item.count/ageTotal*100).toFixed(1)}}%)</p>
  316. <el-progress :percentage="(item.count/ageTotal*100).toFixed(1)"></el-progress>
  317. </span>
  318. <span v-if="item.age == 40">
  319. <p>20&lt;年龄≤40:{{item.count}}人({{(item.count/ageTotal*100).toFixed(1)}}%)</p>
  320. <el-progress :percentage="(item.count/ageTotal*100).toFixed(1)"></el-progress>
  321. </span>
  322. <span v-if="item.age == 60">
  323. <p>40&lt;年龄≤60:{{item.count}}人({{(item.count/ageTotal*100).toFixed(1)}}%)</p>
  324. <el-progress :percentage="(item.count/ageTotal*100).toFixed(1)"></el-progress>
  325. </span>
  326. <span v-if="item.age == 80">
  327. <p>60&lt;年龄≤80:{{item.count}}人({{(item.count/ageTotal*100).toFixed(1)}}%)</p>
  328. <el-progress :percentage="(item.count/ageTotal*100).toFixed(1)"></el-progress>
  329. </span>
  330. <span v-if="item.age ==150">
  331. <p>大于80:{{item.count}}人({{(item.count/ageTotal*100).toFixed(1)}}%)</p>
  332. <el-progress :percentage="(item.count/ageTotal*100).toFixed(1)"></el-progress>
  333. </span>
  334. </div>
  335. </div>
  336. </div>
  337. <div class="infoOne">
  338. <div class="titleBox">
  339. <span class="point1"></span>
  340. <p class="infoTitle">透龄统计</p>
  341. </div>
  342. <div class="borderBox1">
  343. <div v-for="(item,index) in dialysisAge" :key="index">
  344. <span v-if="item.age== 1">
  345. <p>透析龄≤12:{{item.count}}人({{(item.count/patientCount*100).toFixed(1)}}%)</p>
  346. <el-progress :percentage="(item.count/patientCount*100).toFixed(1)"></el-progress>
  347. </span>
  348. <span v-if="item.age == 2">
  349. <p>12&lt;透析龄≤36:{{item.count}}人({{(item.count/patientCount*100).toFixed(1)}}%)</p>
  350. <el-progress :percentage="(item.count/patientCount*100).toFixed(1)"></el-progress>
  351. </span>
  352. <span v-if="item.age == 3">
  353. <p>36≤透析龄≤60:{{item.count}}/人({{(item.count/patientCount*100).toFixed(1)}}%)</p>
  354. <el-progress :percentage="(item.count/patientCount*100).toFixed(1)"></el-progress>
  355. </span>
  356. <span v-if="item.age == 4">
  357. 透析龄 ≥60:{{item.count}}人({{((item.count)/patientCount*100).toFixed(1)}}%)
  358. <el-progress :percentage="((item.count)/patientCount*100).toFixed(1)"></el-progress>
  359. </span>
  360. </div>
  361. </div>
  362. </div>
  363. </div>
  364. </div>
  365. </div>
  366. <div v-else>
  367. <div style="margin-bottom:20px;">
  368. <p style="font-size: 16px;font-weight: bold;color: #000;">透析总量</p>
  369. <line-chart :options="chart"></line-chart>
  370. </div>
  371. <div>
  372. <div class="cell clearfix" v-show="treatShow">
  373. <label class="title">
  374. <span class="name">转归状态</span> :
  375. </label>
  376. <div class="time">
  377. <ul class>
  378. <li
  379. :class="item.state == lapseMode ? 'active' : ''"
  380. @click="selectLapsetoMode(item.state)"
  381. v-for="item in lapsetoMode"
  382. :key="item.value"
  383. >{{ item.label }}</li>
  384. </ul>
  385. </div>
  386. </div>
  387. <p style="font-size: 16px;font-weight: bold;color: #000;">转归统计</p>
  388. <line-chart :options="bar"></line-chart>
  389. </div>
  390. </div>
  391. </div>
  392. </div>
  393. </template>
  394. <script>
  395. const moment = require('moment')
  396. import echarts from "echarts";
  397. import { GetOICData } from "@/api/qcd";
  398. import PieChart from "../qcd/components/BarChart";
  399. import { uParseTime } from "@/utils/tools";
  400. import BreadCrumb from "@/xt_pages/components/bread-crumb";
  401. import LineChart from "../qcd/components/LineChart";
  402. import {getDialysisModeType,getTotalLapseCount,getTotalSexCount,getTotalInfectiousCount,getTotalAgeCount,getTotalDialysisCount,getTreatModeList,getCountModeId,getRolloutCount} from "@/api/common/common"
  403. export default {
  404. name: "dialysisTotal",
  405. components: {
  406. PieChart,
  407. BreadCrumb,
  408. LineChart
  409. },
  410. data() {
  411. return {
  412. pickerOptions: {
  413. disabledDate(time) {
  414. let threeMonths = new Date(new Date().setFullYear(new Date().getFullYear()-1)).getTime() - 24 * 3600 * 1000;
  415. return time.getTime() > Date.now() || time.getTime() < threeMonths;;
  416. }
  417. },
  418. crumbs: [
  419. { path: false, name: "质控管理" },
  420. { path: false, name: "基本信息统计" }
  421. ],
  422. listQuery: {
  423. start_time: "",
  424. end_time: "",
  425. page: 1,
  426. limit: 10
  427. },
  428. stateType: 0,
  429. month: [
  430. { value: 0, label: "本月", state: 0 },
  431. { value: 1, label: "近三月", state: 1 },
  432. { value: 2, label: "近半年", state: 2 },
  433. { value: 3, label: "近一年", state: 3 }
  434. // { value:4,label:"自定义",state:4}
  435. ],
  436. modetype:[],
  437. total:0,
  438. patientCount:0,
  439. rollOut:0,
  440. RetentionCount:0,
  441. totalMan:0,
  442. totalWoman:0,
  443. totalGender:0,
  444. InfectiousList:[],
  445. InfectiousTotal:0,
  446. ageCount:[],
  447. ageTotal:0,
  448. otherTotal:0,
  449. totalone:0,
  450. totaltwo:0,
  451. totalthree:0,
  452. rollOutTotal:0,
  453. outTotal:0,
  454. dialysisAge:[],
  455. start:0,
  456. end:0,
  457. lapsetoType: 0,
  458. lapsetoArr: [
  459. { value: 0, label: '全部', source: 0, lapseto: 0 },
  460. { value: 1, label: '转出', source: 0, lapseto: 2 },
  461. { value: 2, label: '留治', source: 0, lapseto: 1 },
  462. // { value: 3, label: '死亡', source:0, lapseto: 3 },
  463. ],
  464. sourceType: 0,
  465. sourceArr: [
  466. { value: 0, label: '全部', source: 0, lapseto: 0 },
  467. { value: 3, label: '门诊', source: 1, lapseto: 1 },
  468. { value: 4, label: '住院', source: 2, lapseto: 1 }
  469. ],
  470. way: 0,
  471. wayArr: [
  472. { value: 0, label: "统计图", state: 0 },
  473. { value: 1, label: "趋势图", state: 1 }
  474. ],
  475. modesData: {
  476. xAxis: [],
  477. series: []
  478. },
  479. modesDataTwo:{
  480. xAxis:[],
  481. series:[]
  482. },
  483. chart: {
  484. title: {
  485. text: "ECharts 入门示例"
  486. },
  487. tooltip: {},
  488. legend: {
  489. data: [],
  490. left: 0
  491. },
  492. xAxis: {
  493. data: []
  494. },
  495. yAxis: {
  496. axisLabel: {
  497. formatter: "{value} %"
  498. },
  499. show: false
  500. },
  501. series: [
  502. {
  503. name: "",
  504. type: "line",
  505. data: [],
  506. barWidth: 30,
  507. label: {
  508. normal: {
  509. show: true,
  510. position: "top",
  511. formatter: "{c}次"
  512. }
  513. },
  514. //配置样式
  515. itemStyle: {
  516. //通常情况下:
  517. //每个柱子的颜色即为colorList数组里的每一项,如果柱子数目多于colorList的长度,则柱子颜色循环使用该数组
  518. normal: {
  519. color: function(params) {
  520. //我这边就两个柱子,大体就两个柱子颜色渐变,所以数组只有两个值,多个颜色就多个值
  521. var colorList = [
  522. ["#A9E0F3", "#9FBDFC"],
  523. ["#FFD7C0", "#FF9994"]
  524. ];
  525. var index = params.dataIndex;
  526. if (params.dataIndex >= colorList.length) {
  527. index = params.dataIndex % colorList.length;
  528. }
  529. return new echarts.graphic.LinearGradient(0, 0, 0, 1, [
  530. { offset: 0, color: colorList[index][0] },
  531. // { offset: 0.5, color: colorList[index][1] },
  532. { offset: 1, color: colorList[index][1] }
  533. ]);
  534. },
  535. barBorderRadius: [5, 5, 0, 0] //柱状角成椭圆形
  536. },
  537. //鼠标悬停时:
  538. emphasis: {
  539. shadowBlur: 10,
  540. shadowOffsetX: 0,
  541. shadowColor: "rgba(0, 0, 0, 0.2)"
  542. }
  543. }
  544. }
  545. ],
  546. dataZoom: [
  547. {
  548. // Y轴固定,让内容滚动
  549. type: 'slider',
  550. show: false,
  551. xAxisIndex: [0],
  552. start: 1,
  553. end: 20, // 设置X轴刻度之间的间隔(根据数据量来调整)
  554. zoomLock: true // 锁定区域禁止缩放(鼠标滚动会缩放,所以禁止)
  555. },
  556. {
  557. type: 'inside',
  558. xAxisIndex: [0],
  559. start: 1,
  560. end: 20,
  561. zoomLock: true // 锁定区域禁止缩放
  562. }
  563. ],
  564. },
  565. bar: {
  566. title: {
  567. text: "ECharts 入门示例"
  568. },
  569. tooltip: {},
  570. legend: {
  571. data: [],
  572. left: 0
  573. },
  574. xAxis: {
  575. data: []
  576. },
  577. yAxis: {
  578. axisLabel: {
  579. formatter: "{value} %"
  580. },
  581. show: false
  582. },
  583. series: [
  584. {
  585. name: "",
  586. type: "line",
  587. data: [],
  588. barWidth: 30,
  589. label: {
  590. normal: {
  591. show: true,
  592. position: "top",
  593. formatter: "{c}次"
  594. }
  595. },
  596. //配置样式
  597. itemStyle: {
  598. //通常情况下:
  599. //每个柱子的颜色即为colorList数组里的每一项,如果柱子数目多于colorList的长度,则柱子颜色循环使用该数组
  600. normal: {
  601. color: function(params) {
  602. //我这边就两个柱子,大体就两个柱子颜色渐变,所以数组只有两个值,多个颜色就多个值
  603. var colorList = [
  604. ["#A9E0F3", "#9FBDFC"],
  605. ["#FFD7C0", "#FF9994"]
  606. ];
  607. var index = params.dataIndex;
  608. if (params.dataIndex >= colorList.length) {
  609. index = params.dataIndex % colorList.length;
  610. }
  611. return new echarts.graphic.LinearGradient(0, 0, 0, 1, [
  612. { offset: 0, color: colorList[index][0] },
  613. // { offset: 0.5, color: colorList[index][1] },
  614. { offset: 1, color: colorList[index][1] }
  615. ]);
  616. },
  617. barBorderRadius: [5, 5, 0, 0] //柱状角成椭圆形
  618. },
  619. //鼠标悬停时:
  620. emphasis: {
  621. shadowBlur: 10,
  622. shadowOffsetX: 0,
  623. shadowColor: "rgba(0, 0, 0, 0.2)"
  624. }
  625. }
  626. }
  627. ],
  628. dataZoom: [
  629. {
  630. // Y轴固定,让内容滚动
  631. type: 'slider',
  632. show: false,
  633. xAxisIndex: [0],
  634. start: 1,
  635. end: 20, // 设置X轴刻度之间的间隔(根据数据量来调整)
  636. zoomLock: true // 锁定区域禁止缩放(鼠标滚动会缩放,所以禁止)
  637. },
  638. {
  639. type: 'inside',
  640. xAxisIndex: [0],
  641. start: 1,
  642. end: 20,
  643. zoomLock: true // 锁定区域禁止缩放
  644. }
  645. ],
  646. },
  647. treatmentMode:[],
  648. stateMode:1,
  649. lapseMode:0,
  650. treatShow:false,
  651. mode_id:0,
  652. lapsetoMode:[
  653. { value: 0, label: "留治", state: 0 },
  654. { value: 1, label: "转出", state: 1}
  655. ],
  656. lapseid:0,
  657. startDate:"",
  658. endDate:"",
  659. };
  660. },
  661. methods: {
  662. getTimestamp(time) {
  663. // 把时间日期转成时间戳
  664. return new Date(time).getTime() / 1000;
  665. },
  666. changeTime(val) {
  667. this.stateType = 4
  668. var timeStar=Date.parse(val)/1000
  669. var timeEnd =Date.parse(this.listQuery.end_time)/1000
  670. var time = this.getTimestamp(val) - this.getTimestamp(this.end_time);
  671. if (time > 0) {
  672. this.$message.error("结束时间不能小于开始时间");
  673. this.start_time = "";
  674. } else {
  675. //统计透析总量
  676. this.getDialysisModeType(val,this.listQuery.end_time,this.lapsetoType,this.sourceType)
  677. //统计转归状态
  678. this.getTotalLapseCount(this.listQuery.start_time,this.listQuery.end_time,this.lapsetoType,this.sourceType)
  679. //统计男女比例
  680. this.getTotalSexCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  681. //统计传染病
  682. this.getTotalInfectiousCount(this.listQuery.start_time,this.listQuery.end_time,this.lapsetoType,this.sourceType)
  683. //统计年龄
  684. this.getTotalAgeCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  685. //统计透析年龄
  686. this.getTotalDialysisCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  687. this.start = timeStar
  688. this.end =timeEnd
  689. this.getCountModeId()
  690. this.getRolloutCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  691. }
  692. },
  693. changeEndTime(val) {
  694. this.stateType = 4
  695. var timeEnd=Date.parse(val)/1000
  696. var timeStar =Date.parse(this.listQuery.start_time)/1000
  697. var time =
  698. this.getTimestamp(val) - this.getTimestamp(this.listQuery.start_time);
  699. if (time < 0) {
  700. this.$message.error("结束时间不能小于开始时间");
  701. this.listQuery.end_time = "";
  702. } else {
  703. //统计透析总量
  704. this.getDialysisModeType(this.listQuery.start_time,val,this.lapsetoType,this.sourceType)
  705. //统计转归状态
  706. this.getTotalLapseCount(this.listQuery.start_time,this.listQuery.end_time,this.lapsetoType,this.sourceType)
  707. //统计男女比例
  708. this.getTotalSexCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  709. //统计传染病
  710. this.getTotalInfectiousCount(this.listQuery.start_time,this.listQuery.end_time,this.lapsetoType,this.sourceType)
  711. //统计年龄
  712. this.getTotalAgeCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  713. //统计透析年龄
  714. this.getTotalDialysisCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  715. this.start = timeStar
  716. this.end =timeEnd
  717. this.getCountModeId()
  718. this.getRolloutCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  719. }
  720. },
  721. selectLapseTo(state) {
  722. this.stateType = state;
  723. this.listQuery.state = state;
  724. //获取本月当前机构的透析模式
  725. const startDate = moment().subtract('month', 0).format('YYYY-MM') + '-01'
  726. const endDate = moment(new Date()).format('YYYY-MM-DD')
  727. var now = new Date()
  728. var nowMonth = now.getMonth(); //当前月
  729. var nowYear = now.getFullYear(); //当前年
  730. //本月的开始时间
  731. var monthStartDate = new Date(nowYear, nowMonth, 1);
  732. var timeStar=Date.parse(monthStartDate)/1000;//s
  733. // console.log("本月第一天",timeStar)
  734. //本月的结束时间
  735. var monthEndDate = new Date(nowYear, nowMonth+1, 0);
  736. var timeEnd=Date.parse(monthEndDate)/1000-1;//s
  737. console.log("本月最后一天",timeEnd)
  738. this.startDate = startDate
  739. this.endDate = endDate
  740. this.listQuery.start_time = startDate
  741. this.listQuery.end_time = endDate
  742. //本月
  743. if(state == 0){
  744. //统计透析总量
  745. this.getDialysisModeType(startDate,endDate,this.lapsetoType,this.sourceType)
  746. //统计转归状态
  747. this.getTotalLapseCount(startDate,endDate,this.lapsetoType,this.sourceType)
  748. //统计男女比例
  749. this.getTotalSexCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  750. //统计传染病
  751. this.getTotalInfectiousCount(startDate,endDate,this.lapsetoType,this.sourceType)
  752. //统计年龄
  753. this.getTotalAgeCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  754. //统计透析年龄
  755. this.getTotalDialysisCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  756. this.start = timeStar
  757. this.end = timeEnd
  758. this.getCountModeId()
  759. this.getRolloutCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  760. }
  761. //近三月
  762. if(state == 1){
  763. this.listQuery.start_time = ""
  764. this.listQuery.end_time = ""
  765. const startDate = moment().subtract('month', 3).format('YYYY-MM-DD')
  766. var startunitx = Date.parse(startDate)/1000
  767. // console.log("开始时间搓",startunitx)
  768. const endDate = moment(new Date()).format('YYYY-MM-DD')
  769. // console.log("结束时间",endDate)
  770. var endunitx = Date.parse(endDate)/1000
  771. // console.log("日期时间搓",endunitx)
  772. this.startDate = startDate
  773. this.endDate = endDate
  774. this.listQuery.start_time = startDate
  775. this.listQuery.end_time = endDate
  776. //统计透析总量
  777. this.getDialysisModeType(startDate,endDate,this.lapsetoType,this.sourceType)
  778. //统计转归状态
  779. this.getTotalLapseCount(startDate,endDate,this.lapsetoType,this.sourceType)
  780. //统计男女比例
  781. this.getTotalSexCount(startunitx,endunitx,this.lapsetoType,this.sourceType)
  782. //统计传染病
  783. this.getTotalInfectiousCount(startDate,endDate,this.lapsetoType,this.sourceType)
  784. //统计年龄
  785. this.getTotalAgeCount(startunitx,endunitx,this.lapsetoType,this.sourceType)
  786. //统计透析年龄
  787. this.getTotalDialysisCount(startunitx,endunitx,this.lapsetoType,this.sourceType)
  788. this.start = startunitx
  789. this.end = endunitx
  790. this.getCountModeId()
  791. this.getRolloutCount(startunitx,endunitx,this.lapsetoType,this.sourceType)
  792. }
  793. //近半年
  794. if(state == 2){
  795. this.listQuery.start_time = ""
  796. this.listQuery.end_time = ""
  797. const startDate = moment().subtract('month', 6).format('YYYY-MM-DD')
  798. // console.log("6月前",startDate)
  799. var startunitx = Date.parse(startDate)/1000
  800. // console.log("开始时间搓",startunitx)
  801. const endDate = moment(new Date()).format('YYYY-MM-DD')
  802. // console.log("结束时间",endDate)
  803. var endunitx = Date.parse(endDate)/1000
  804. // console.log("日期时间搓",endunitx)
  805. this.startDate = startDate
  806. this.endDate = endDate
  807. this.listQuery.start_time = startDate
  808. this.listQuery.end_time = endDate
  809. //统计透析总量
  810. this.getDialysisModeType(startDate,endDate,this.lapsetoType,this.sourceType)
  811. //统计转归状态
  812. this.getTotalLapseCount(startDate,endDate,this.lapsetoType,this.sourceType)
  813. //统计男女比例
  814. this.getTotalSexCount(startunitx,endunitx,this.lapsetoType,this.sourceType)
  815. //统计传染病
  816. this.getTotalInfectiousCount(startDate,endDate,this.lapsetoType,this.sourceType)
  817. //统计年龄
  818. this.getTotalAgeCount(startunitx,endunitx,this.lapsetoType,this.sourceType)
  819. //统计透析年龄
  820. this.getTotalDialysisCount(startunitx,endunitx,this.lapsetoType,this.sourceType)
  821. this.start = startunitx
  822. this.end = endunitx
  823. this.getCountModeId()
  824. this.getRolloutCount(startunitx,endunitx,this.lapsetoType,this.sourceType)
  825. }
  826. //近一年
  827. if(state == 3){
  828. this.listQuery.start_time = ""
  829. this.listQuery.end_time = ""
  830. const startDate = moment().subtract('month', 12).format('YYYY-MM-DD')
  831. // console.log("6月前",startDate)
  832. var startunitx = Date.parse(startDate)/1000
  833. // console.log("开始时间搓",startunitx)
  834. const endDate = moment(new Date()).format('YYYY-MM-DD')
  835. // console.log("结束时间",endDate)
  836. var endunitx = Date.parse(endDate)/1000
  837. // console.log("日期时间搓",endunitx)
  838. this.startDate = startDate
  839. this.endDate = endDate
  840. this.listQuery.start_time = startDate
  841. this.listQuery.end_time = endDate
  842. //统计透析总量
  843. this.getDialysisModeType(startDate,endDate,this.lapsetoType,this.sourceType)
  844. //统计转归状态
  845. this.getTotalLapseCount(startDate,endDate,this.lapsetoType,this.sourceType)
  846. //统计男女比例
  847. this.getTotalSexCount(startunitx,endunitx,this.lapsetoType,this.sourceType)
  848. //统计传染病
  849. this.getTotalInfectiousCount(startDate,endDate,this.lapsetoType,this.sourceType)
  850. //统计年龄
  851. this.getTotalAgeCount(startunitx,endunitx,this.lapsetoType,this.sourceType)
  852. //统计透析年龄
  853. this.getTotalDialysisCount(startunitx,endunitx,this.lapsetoType,this.sourceType)
  854. this.start = startunitx
  855. this.end = endunitx
  856. this.getCountModeId()
  857. this.getRolloutCount(startunitx,endunitx,this.lapsetoType,this.sourceType)
  858. }
  859. },
  860. selectTreatMode(state){
  861. this.mode_id = state
  862. this.stateMode = state;
  863. this.getCountModeId()
  864. },
  865. selectLapsetoMode(state){
  866. this.lapseid = state
  867. this.lapseMode = state
  868. this.getRolloutCount(this.start,this.end)
  869. },
  870. getDialysisModeType(startDate,endDate,lapsetoType,sourceType){
  871. this.modesData.series = []
  872. this.modesData.xAxis = []
  873. getDialysisModeType(startDate,endDate,lapsetoType,sourceType).then(response=>{
  874. if(response.data.state == 1){
  875. // var modetype = response.data.data.modetype
  876. // console.log("modetype",modetype)
  877. var total = response.data.data.total
  878. console.log("total",total)
  879. this.total = total.count
  880. // this.total = total
  881. // console.log("数据",this.modetype)
  882. var modedate = response.data.data.modetype
  883. for(let i=0;i<modedate.length;i++){
  884. if(modedate[i].mode_id == 0){
  885. modedate[i].mode_id = "未知"
  886. }
  887. if(modedate[i].mode_id == 1){
  888. modedate[i].mode_id = "HD"
  889. }
  890. if(modedate[i].mode_id == 2){
  891. modedate[i].mode_id = "HDF"
  892. }
  893. if(modedate[i].mode_id == 3){
  894. modedate[i].mode_id = "HD+HP"
  895. }
  896. if(modedate[i].mode_id == 4){
  897. modedate[i].mode_id = "HP"
  898. }
  899. if(modedate[i].mode_id == 5){
  900. modedate[i].mode_id = "HF"
  901. }
  902. if(modedate[i].mode_id == 6){
  903. modedate[i].mode_id = "SCUF"
  904. }
  905. if(modedate[i].mode_id == 7){
  906. modedate[i].mode_id = "IUF"
  907. }
  908. if(modedate[i].mode_id == 8){
  909. modedate[i].mode_id = "HFHD"
  910. }
  911. if(modedate[i].mode_id == 9){
  912. modedate[i].mode_id = "HFHD+HP"
  913. }
  914. if(modedate[i].mode_id == 10){
  915. modedate[i].mode_id = "PHF"
  916. }
  917. if(modedate[i].mode_id == 11){
  918. modedate[i].mode_id = "HFR"
  919. }
  920. if(modedate[i].mode_id == 12){
  921. modedate[i].mode_id = "HDF+HP"
  922. }
  923. if(modedate[i].mode_id == 13){
  924. modedate[i].mode_id = "CRRT"
  925. }
  926. if(modedate[i].mode_id == 14){
  927. modedate[i].mode_id = "腹水回输"
  928. }
  929. if(modedate[i].mode_id == 15){
  930. modedate[i].mode_id = "HD前置换"
  931. }
  932. if(modedate[i].mode_id == 16){
  933. modedate[i].mode_id = "HD后置换"
  934. }
  935. if(modedate[i].mode_id == 17){
  936. modedate[i].mode_id = "HDF前置换"
  937. }
  938. if(modedate[i].mode_id == 18){
  939. modedate[i].mode_id = "HDF后置换"
  940. }
  941. if(modedate[i].mode_id == 19){
  942. modedate[i].mode_id = "IUF+HD"
  943. }
  944. if(modedate[i].mode_id == 20){
  945. modedate[i].mode_id = "IU"
  946. }
  947. if(modedate[i].mode_id == 21){
  948. modedate[i].mode_id = "HD+"
  949. }
  950. if(modedate[i].mode_id == 22){
  951. modedate[i].mode_id = "血浆胆红素吸附+HDF"
  952. }
  953. if(modedate[i].mode_id == 23){
  954. modedate[i].mode_id = "血浆胆红素吸附"
  955. }
  956. if(modedate[i].mode_id == 24){
  957. modedate[i].mode_id = "I-HDF"
  958. }
  959. if(modedate[i].mode_id == 25){
  960. modedate[i].mode_id = "HD高通"
  961. }
  962. if(modedate[i].mode_id == 26){
  963. modedate[i].mode_id = "CVVH"
  964. }
  965. if(modedate[i].mode_id == 27){
  966. modedate[i].mode_id = "CVVHD"
  967. }
  968. if(modedate[i].mode_id == 28){
  969. modedate[i].mode_id = "CVVHDF"
  970. }
  971. this.modetype = modedate
  972. // this.modesData.xAxis.push(modedate[i].mode_id)
  973. // this.modesData.series.push(((modedate[i].count/total)*100).toFixed(1))
  974. }
  975. // this.chart.series[0].data = this.modesData.series
  976. // this.chart.xAxis.data = this.modesData.xAxis
  977. // this.getArrLength1(this.chart.xAxis.data)
  978. }
  979. })
  980. },
  981. //统计转归
  982. getTotalLapseCount(startDate,endDate,lapsetoType,sourceType ){
  983. this.modesDataTwo.series = []
  984. this.modesDataTwo.xAxis = []
  985. getTotalLapseCount(startDate,endDate,lapsetoType,sourceType).then(response=>{
  986. if(response.data.state == 1){
  987. var arr = [
  988. {name:"留治",count:0},
  989. {name:"转出",count:0}
  990. ]
  991. var patients = response.data.data.patients
  992. this.rollOutTotal = patients.length
  993. var patienttwo = response.data.data.patienttwo
  994. this.outTotal = patienttwo.length
  995. var count = response.data.data.count
  996. this.patientCount = count
  997. var rollout = response.data.data.rollout
  998. for(let i=0;i<arr.length;i++){
  999. arr[0].count = this.rollOutTotal
  1000. arr[1].count = this.outTotal
  1001. }
  1002. }
  1003. })
  1004. },
  1005. //统计男女比例
  1006. getTotalSexCount(timeStar,timeEnd,lapsetoType,sourceType){
  1007. getTotalSexCount(timeStar,timeEnd,lapsetoType,sourceType).then(response=>{
  1008. if(response.data.state === 1){
  1009. console.log("resp2222",response.data.data.totalWoman)
  1010. var total = response.data.data.total
  1011. this.totalGender = total
  1012. var totalMan = response.data.data.totalSex
  1013. this.totalMan = totalMan
  1014. var totalWoman = response.data.data.totalWoman
  1015. this.totalWoman = totalWoman
  1016. }
  1017. })
  1018. },
  1019. //统计传染病
  1020. getTotalInfectiousCount(timeStar,timeEnd,lapsetoType,sourceType){
  1021. getTotalInfectiousCount(timeStar,timeEnd,lapsetoType,sourceType).then(response=>{
  1022. if(response.data.state === 1){
  1023. this.InfectiousTotal = response.data.data.total
  1024. var infectious = response.data.data.count
  1025. var otherTotal = response.data.data.otherTotal
  1026. this.otherTotal = otherTotal
  1027. var arr = [
  1028. {count:0,disease_id:2},
  1029. {count:0,disease_id:3},
  1030. {count:0,disease_id:4},
  1031. {count:0,disease_id:5},
  1032. {count:0,disease_id:6},
  1033. ]
  1034. if(infectious.length == 0){
  1035. this.InfectiousList = arr
  1036. return false
  1037. }
  1038. this.InfectiousList = infectious
  1039. }
  1040. })
  1041. },
  1042. getTotalAgeCount(timeStar,timeEnd,lapsetoType,sourceType){
  1043. getTotalAgeCount(timeStar,timeEnd,lapsetoType,sourceType).then(response=>{
  1044. if(response.data.state == 1){
  1045. var ageCount = response.data.data.ageCount
  1046. var arr = []
  1047. arr = ageCount.sort(this.compare('age'))
  1048. this.ageCount = arr
  1049. this.ageTotal = response.data.data.total
  1050. }
  1051. })
  1052. },
  1053. compare:function (k) {
  1054. return function (a, b) {
  1055. var M = a[k];
  1056. var N = b[k];
  1057. return M - N; // 从低向高排
  1058. // return N - M; // 从高向低排
  1059. }
  1060. },
  1061. //统计透析年龄
  1062. getTotalDialysisCount(timeStar,timeEnd,lapsetoType,sourceType){
  1063. getTotalDialysisCount(timeStar,timeEnd,lapsetoType,sourceType).then(response=>{
  1064. if(response.data.state == 1){
  1065. var dataage = response.data.data.dataage
  1066. this.dialysisAge = dataage
  1067. }
  1068. })
  1069. },
  1070. getTreatModeList(timeStar,timeEnd){
  1071. const params = {
  1072. start_time:timeStar,
  1073. end_time:timeEnd
  1074. }
  1075. getTreatModeList(params).then(response=>{
  1076. if(response.data.state == 1){
  1077. var list = response.data.data.list
  1078. this.mode_id = list[0].mode_id
  1079. for(let i=0;i<list.length;i++){
  1080. if(list[i].mode_id == 1){
  1081. list[i].name = "HD"
  1082. list[i].state = 1
  1083. }
  1084. if(list[i].mode_id == 2){
  1085. list[i].name = "HDF"
  1086. list[i].state = 2
  1087. }
  1088. if(list[i].mode_id == 3){
  1089. list[i].name = "HD+HP"
  1090. list[i].state = 3
  1091. }
  1092. if(list[i].mode_id == 4){
  1093. list[i].name = "HP"
  1094. list[i].state = 4
  1095. }
  1096. if(list[i].mode_id == 5){
  1097. list[i].name = "HF"
  1098. list[i].state = 5
  1099. }
  1100. if(list[i].mode_id == 6){
  1101. list[i].name = "SCUF"
  1102. list[i].state = 6
  1103. }
  1104. if(list[i].mode_id == 7){
  1105. list[i].name = "IUF"
  1106. list[i].state = 7
  1107. }
  1108. if(list[i].mode_id == 8){
  1109. list[i].name="HFHD"
  1110. list[i].state = 8
  1111. }
  1112. if(list[i].mode_id == 9){
  1113. list[i].name ="HFHD+HP"
  1114. list[i].state = 9
  1115. }
  1116. if(list[i].mode_id == 10){
  1117. list[i].name = "PHF"
  1118. list[i].state = 10
  1119. }
  1120. if(list[i].mode_id == 11){
  1121. list[i].name = "HFR"
  1122. list[i].state = 11
  1123. }
  1124. if(list[i].mode_id == 12){
  1125. list[i].name = "HDF+HP"
  1126. list[i].state = 12
  1127. }
  1128. if(list[i].mode_id == 13){
  1129. list[i].name = "CRRT"
  1130. list[i].state = 13
  1131. }
  1132. if(list[i].mode_id == 14){
  1133. list[i].name = "腹水回输"
  1134. list[i].state = 14
  1135. }
  1136. if(list[i].mode_id == 15){
  1137. list[i].name = "HD前置换"
  1138. list[i].state = 15
  1139. }
  1140. if(list[i].mode_id == 16){
  1141. list[i].name = "HD后置换"
  1142. list[i].state = 16
  1143. }
  1144. if(list[i].mode_id == 17){
  1145. list[i].name = "HDF前置换"
  1146. list[i].state = 17
  1147. }
  1148. if(list[i].mode_id == 18){
  1149. list[i].name = "HDF后置换"
  1150. list[i].state = 18
  1151. }
  1152. if(list[i].mode_id == 19) {
  1153. list[i].name = "IUF+HD"
  1154. list[i].state = 19
  1155. }
  1156. }
  1157. this.treatmentMode = list
  1158. }
  1159. })
  1160. },
  1161. selectWay(index){
  1162. this.way = index
  1163. if(index == 0){
  1164. this.treatShow = false
  1165. }
  1166. if(index == 1){
  1167. this.treatShow = true
  1168. this.getCountModeId()
  1169. }
  1170. },
  1171. getArrLength(result){
  1172. if(result.length > 10){
  1173. var dataZoom_end = (10/result.length)*100;
  1174. this.bar.dataZoom[0].end = dataZoom_end
  1175. }else{
  1176. var dataZoom_end = 100;
  1177. this.bar.dataZoom[0].end = dataZoom_end
  1178. }
  1179. },
  1180. getArrLength1(result){
  1181. if(result.length > 10){
  1182. var dataZoom_end = (10/result.length)*100;
  1183. this.chart.dataZoom[0].end = dataZoom_end
  1184. }else{
  1185. var dataZoom_end = 100;
  1186. this.chart.dataZoom[0].end = dataZoom_end
  1187. }
  1188. },
  1189. getCountModeId(){
  1190. const params = {
  1191. start_time:this.start,
  1192. end_time:this.end,
  1193. mode_id:this.mode_id,
  1194. }
  1195. this.modesData.series = []
  1196. this.modesData.xAxis = []
  1197. getCountModeId(params).then(response=>{
  1198. if(response.data.state == 1){
  1199. var modeCount = response.data.data.modeCount
  1200. for(let i=0;i<modeCount.length;i++){
  1201. this.modesData.xAxis.push(moment(new Date(modeCount[i].dialysis_date*1000)).format('YYYY-MM-DD'))
  1202. this.modesData.series.push(modeCount[i].Count)
  1203. this.chart.series[0].data = this.modesData.series
  1204. this.chart.xAxis.data = this.modesData.xAxis
  1205. this.getArrLength1(this.chart.xAxis.data)
  1206. }
  1207. }
  1208. })
  1209. },
  1210. getRolloutCount(){
  1211. this.modesDataTwo.series = []
  1212. this.modesDataTwo.xAxis = []
  1213. const params = {
  1214. start_time:this.start,
  1215. end_time:this.end,
  1216. lapsetotype:this.lapsetoType,
  1217. sourcetype:this.sourceType,
  1218. }
  1219. getRolloutCount(params).then(response=>{
  1220. if(response.data.state == 1){
  1221. var rollout = response.data.data.rollout
  1222. var arr = []
  1223. var arrOne = []
  1224. for(let i=0;i<rollout.length;i++){
  1225. if(rollout[i].lapseto_type == 1){
  1226. arr.push(rollout[i])
  1227. }
  1228. if(rollout[i].lapseto_type == 2){
  1229. arrOne.push(rollout[i])
  1230. }
  1231. }
  1232. if(this.lapseid == 0){
  1233. this.modesDataTwo.xAxis = []
  1234. this.modesDataTwo.series = []
  1235. for(let i=0;i<arr.length;i++){
  1236. this.modesDataTwo.xAxis.push(moment(new Date(arr[i]. lapseto_time*1000)).format('YYYY-MM-DD'))
  1237. this.modesDataTwo.series.push(arr[i].Count)
  1238. }
  1239. this.bar.series[0].data = this.modesDataTwo.series
  1240. this.bar.xAxis.data = this.modesDataTwo.xAxis
  1241. this.getArrLength(this.bar.xAxis.data)
  1242. }
  1243. if(this.lapseid == 1){
  1244. this.modesDataTwo.xAxis = []
  1245. this.modesDataTwo.series = []
  1246. for(let i=0;i<arrOne.length;i++){
  1247. this.modesDataTwo.xAxis.push(moment(new Date(arrOne[i].lapseto_time*1000)).format('YYYY-MM-DD'))
  1248. this.modesDataTwo.series.push(arrOne[i].Count)
  1249. }
  1250. this.bar.series[0].data = this.modesDataTwo.series
  1251. this.bar.xAxis.data = this.modesDataTwo.xAxis
  1252. this.getArrLength(this.bar.xAxis.data)
  1253. }
  1254. }
  1255. })
  1256. },
  1257. selectSource(source) {
  1258. this.sourceType = source
  1259. this.getDialysisModeType(this.startDate,this.endDate,this.lapsetoType,this.sourceType)
  1260. this.getTotalLapseCount(this.startDate,this.endDate,this.lapsetoType,this.sourceType)
  1261. this.getTotalSexCount(this.startDate,this.endDate,this.lapsetoType,this.sourceType)
  1262. this.getTotalInfectiousCount(this.startDate,this.endDate,this.lapsetoType,this.sourceType)
  1263. this.getTotalAgeCount(this.startDate,this.endDate,this.lapsetoType,this.sourceType)
  1264. this.getTotalDialysisCount(this.startDate,this.endDate,this.lapsetoType,this.sourceType)
  1265. this.getRolloutCount(this.lapsetoType,this.sourceType)
  1266. },
  1267. selectLapseOne(lapseto) {
  1268. console.log("lapseto22222",lapseto)
  1269. this.lapsetoType = lapseto
  1270. this.getDialysisModeType(this.startDate,this.endDate,this.lapsetoType,this.sourceType)
  1271. this.getTotalLapseCount(this.startDate,this.endDate,this.lapsetoType,this.sourceType)
  1272. this.getTotalSexCount(this.startDate,this.endDate,this.lapsetoType,this.sourceType)
  1273. this.getTotalInfectiousCount(this.startDate,this.endDate,this.lapsetoType,this.sourceType)
  1274. this.getTotalAgeCount(this.startDate,this.endDate,this.lapsetoType,this.sourceType)
  1275. this.getTotalDialysisCount(this.startDate,this.endDate,this.lapsetoType,this.sourceType)
  1276. this.getRolloutCount(this.lapsetoType,this.sourceType)
  1277. },
  1278. },
  1279. created() {
  1280. //获取本月当前机构的透析模式
  1281. const startDate = moment().subtract('month', 0).format('YYYY-MM') + '-01'
  1282. const endDate = moment(new Date()).format('YYYY-MM-DD')
  1283. var now = new Date()
  1284. var nowMonth = now.getMonth(); //当前月
  1285. var nowYear = now.getFullYear(); //当前年
  1286. //本月的开始时间
  1287. var monthStartDate = new Date(nowYear, nowMonth, 1);
  1288. var timeStar=Date.parse(monthStartDate)/1000;//s
  1289. //本月的结束时间
  1290. var monthEndDate = new Date(nowYear, nowMonth+1, 0);
  1291. var timeEnd=Date.parse(monthEndDate)/1000-1;//s
  1292. this.startDate = startDate
  1293. this.endDate = endDate
  1294. //统计透析总量
  1295. this.getDialysisModeType(startDate,endDate,this.lapsetoType,this.sourceType)
  1296. //统计转归状态
  1297. this.getTotalLapseCount(startDate,endDate,this.lapsetoType,this.sourceType)
  1298. //统计男女比例
  1299. this.getTotalSexCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  1300. //统计传染病
  1301. this.getTotalInfectiousCount(startDate,endDate,this.lapsetoType,this.sourceType)
  1302. //统计年龄
  1303. this.getTotalAgeCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  1304. //统计透析年龄
  1305. this.getTotalDialysisCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  1306. //获取当前选中时间所有的透析模式
  1307. this.getTreatModeList(timeStar,timeEnd)
  1308. this.start = timeStar
  1309. this.end = timeEnd
  1310. this.getRolloutCount(timeStar,timeEnd,this.lapsetoType,this.sourceType)
  1311. },
  1312. };
  1313. </script>
  1314. <style rel="stylesheet/scss" lang="scss" scoped>
  1315. .infoBox {
  1316. display: flex;
  1317. flex-wrap: wrap;
  1318. .infoOne {
  1319. margin-right: 30px;
  1320. margin-top: 20px;
  1321. .titleBox {
  1322. display: flex;
  1323. align-items: center;
  1324. }
  1325. .point {
  1326. display: inline-block;
  1327. width: 7px;
  1328. height: 7px;
  1329. background: linear-gradient(
  1330. 90deg,
  1331. rgba(169, 224, 243, 1),
  1332. rgba(159, 189, 252, 1)
  1333. );
  1334. border-radius: 50%;
  1335. }
  1336. .point1 {
  1337. width: 7px;
  1338. height: 7px;
  1339. background: linear-gradient(
  1340. 90deg,
  1341. rgba(255, 215, 192, 1),
  1342. rgba(255, 153, 148, 1)
  1343. );
  1344. border-radius: 50%;
  1345. }
  1346. .point2 {
  1347. width: 7px;
  1348. height: 7px;
  1349. background: linear-gradient(
  1350. 90deg,
  1351. rgba(215, 195, 253, 1),
  1352. rgba(179, 168, 247, 1)
  1353. );
  1354. border-radius: 50%;
  1355. }
  1356. .infoTitle {
  1357. font-size: 16px;
  1358. font-weight: bold;
  1359. margin-left: 5px;
  1360. color: #000;
  1361. }
  1362. .borderBox {
  1363. width: 340px;
  1364. min-height: 140px;
  1365. background: rgba(255, 255, 255, 1);
  1366. border: 1px solid rgba(229, 229, 229, 1);
  1367. border-radius: 10px;
  1368. padding: 0 14px 20px;
  1369. margin-top: 10px;
  1370. p {
  1371. font-size: 14px;
  1372. color: #000;
  1373. margin: 10px 0 3px;
  1374. }
  1375. }
  1376. .borderBox1 {
  1377. width: 340px;
  1378. min-height: 140px;
  1379. background: rgba(255, 255, 255, 1);
  1380. border: 1px solid rgba(229, 229, 229, 1);
  1381. border-radius: 10px;
  1382. padding: 0 14px 20px;
  1383. margin-top: 10px;
  1384. p {
  1385. font-size: 14px;
  1386. color: #000;
  1387. margin: 10px 0 3px;
  1388. }
  1389. }
  1390. .borderBox2 {
  1391. width: 340px;
  1392. min-height: 140px;
  1393. background: rgba(255, 255, 255, 1);
  1394. border: 1px solid rgba(229, 229, 229, 1);
  1395. border-radius: 10px;
  1396. padding: 0 14px 20px;
  1397. margin-top: 10px;
  1398. p {
  1399. font-size: 14px;
  1400. color: #000;
  1401. margin: 10px 0 3px;
  1402. }
  1403. }
  1404. }
  1405. }
  1406. </style>
  1407. <style lang="scss">
  1408. .infoBox {
  1409. .infoOne {
  1410. .el-progress-bar__outer{
  1411. height:10px !important;
  1412. }
  1413. .borderBox {
  1414. .el-progress-bar__inner {
  1415. background: linear-gradient(
  1416. 90deg,
  1417. rgba(169, 224, 243, 1),
  1418. rgba(159, 189, 252, 1)
  1419. );
  1420. }
  1421. .el-progress-bar{
  1422. margin-right: -59px;
  1423. padding-right: 60px;
  1424. }
  1425. }
  1426. .borderBox1 {
  1427. .el-progress-bar__inner {
  1428. background: linear-gradient(
  1429. 90deg,
  1430. rgba(255, 215, 192, 1),
  1431. rgba(255, 153, 148, 1)
  1432. );
  1433. }
  1434. .el-progress-bar{
  1435. margin-right: -59px;
  1436. padding-right: 60px;
  1437. }
  1438. }
  1439. .borderBox2 {
  1440. .el-progress-bar__inner {
  1441. background: linear-gradient(
  1442. 90deg,
  1443. rgba(215, 195, 253, 1),
  1444. rgba(179, 168, 247, 1)
  1445. );
  1446. }
  1447. .el-progress-bar{
  1448. margin-right: -59px;
  1449. padding-right: 60px;
  1450. }
  1451. }
  1452. }
  1453. }
  1454. </style>