risk-assessment-map.vue 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943
  1. <template>
  2. <a-card :class="$style.topDiv">
  3. <a-spin :spinning="spinning" tip="数据加载中...">
  4. <div :class="$style.title">风险图谱</div>
  5. <div :class="$style.radioDiv">
  6. <div>
  7. <font :class="$style.radioText">风险维度:</font>
  8. <a-radio-group v-model="selectType" @change="radioChange">
  9. <a-radio value="GY">固有风险</a-radio>
  10. <a-radio value="SY">剩余风险</a-radio>
  11. </a-radio-group></div
  12. >
  13. <div>
  14. <a-button type="primary" @click="resetMap">重置</a-button>
  15. </div>
  16. </div>
  17. <div :class="$style.mainDiv">
  18. <div :class="$style.leftDiv">
  19. <div :class="$style.title">风险图谱</div>
  20. <table :class="$style.leftTable">
  21. <tr>
  22. <td>{{ riskDegreeList[4] }}</td>
  23. <td>5</td>
  24. <td
  25. :class="{
  26. [$style.greenTd]: lowRiskLeft <= 5 && lowRiskRight >= 5,
  27. [$style.yellowTd]: mediumRiskLeft <= 5 && mediumRiskRight >= 5,
  28. [$style.redTd]: heightRiskLeft <= 5 && heightRiskRight >= 5,
  29. }"
  30. @click="
  31. tdClick(
  32. 1,
  33. 5,
  34. riskAssessmentMapInfo[riskPossibilityList[0] + '_' + riskDegreeList[4]]
  35. )
  36. "
  37. >
  38. {{
  39. riskAssessmentMapInfo[riskPossibilityList[0] + '_' + riskDegreeList[4]]
  40. | mapFormat
  41. }}</td
  42. >
  43. <td
  44. :class="{
  45. [$style.greenTd]: lowRiskLeft <= 10 && lowRiskRight >= 10,
  46. [$style.yellowTd]: mediumRiskLeft <= 10 && mediumRiskRight >= 10,
  47. [$style.redTd]: heightRiskLeft <= 10 && heightRiskRight >= 10,
  48. }"
  49. @click="
  50. tdClick(
  51. 2,
  52. 5,
  53. riskAssessmentMapInfo[riskPossibilityList[1] + '_' + riskDegreeList[4]]
  54. )
  55. "
  56. >{{
  57. riskAssessmentMapInfo[riskPossibilityList[1] + '_' + riskDegreeList[4]]
  58. | mapFormat
  59. }}</td
  60. >
  61. <td
  62. :class="{
  63. [$style.greenTd]: lowRiskLeft <= 15 && lowRiskRight >= 15,
  64. [$style.yellowTd]: mediumRiskLeft <= 15 && mediumRiskRight >= 15,
  65. [$style.redTd]: heightRiskLeft <= 15 && heightRiskRight >= 15,
  66. }"
  67. @click="
  68. tdClick(
  69. 3,
  70. 5,
  71. riskAssessmentMapInfo[riskPossibilityList[2] + '_' + riskDegreeList[4]]
  72. )
  73. "
  74. >{{
  75. riskAssessmentMapInfo[riskPossibilityList[2] + '_' + riskDegreeList[4]]
  76. | mapFormat
  77. }}</td
  78. >
  79. <td
  80. :class="{
  81. [$style.greenTd]: lowRiskLeft <= 20 && lowRiskRight >= 20,
  82. [$style.yellowTd]: mediumRiskLeft <= 20 && mediumRiskRight >= 20,
  83. [$style.redTd]: heightRiskLeft <= 20 && heightRiskRight >= 20,
  84. }"
  85. @click="
  86. tdClick(
  87. 4,
  88. 5,
  89. riskAssessmentMapInfo[riskPossibilityList[3] + '_' + riskDegreeList[4]]
  90. )
  91. "
  92. >{{
  93. riskAssessmentMapInfo[riskPossibilityList[3] + '_' + riskDegreeList[4]]
  94. | mapFormat
  95. }}</td
  96. >
  97. <td
  98. :class="{
  99. [$style.greenTd]: lowRiskLeft <= 25 && lowRiskRight >= 25,
  100. [$style.yellowTd]: mediumRiskLeft <= 25 && mediumRiskRight >= 25,
  101. [$style.redTd]: heightRiskLeft <= 25 && heightRiskRight >= 25,
  102. }"
  103. @click="
  104. tdClick(
  105. 5,
  106. 5,
  107. riskAssessmentMapInfo[riskPossibilityList[4] + '_' + riskDegreeList[4]]
  108. )
  109. "
  110. >{{
  111. riskAssessmentMapInfo[riskPossibilityList[4] + '_' + riskDegreeList[4]]
  112. | mapFormat
  113. }}</td
  114. >
  115. </tr>
  116. <tr>
  117. <td>{{ riskDegreeList[3] }}</td>
  118. <td>4</td>
  119. <td
  120. :class="{
  121. [$style.greenTd]: lowRiskLeft <= 4 && lowRiskRight >= 4,
  122. [$style.yellowTd]: mediumRiskLeft <= 4 && mediumRiskRight >= 4,
  123. [$style.redTd]: heightRiskLeft <= 4 && heightRiskRight >= 4,
  124. }"
  125. @click="
  126. tdClick(
  127. 1,
  128. 4,
  129. riskAssessmentMapInfo[riskPossibilityList[0] + '_' + riskDegreeList[3]]
  130. )
  131. "
  132. >{{
  133. riskAssessmentMapInfo[riskPossibilityList[0] + '_' + riskDegreeList[3]]
  134. | mapFormat
  135. }}</td
  136. >
  137. <td
  138. :class="{
  139. [$style.greenTd]: lowRiskLeft <= 8 && lowRiskRight >= 8,
  140. [$style.yellowTd]: mediumRiskLeft <= 8 && mediumRiskRight >= 8,
  141. [$style.redTd]: heightRiskLeft <= 8 && heightRiskRight >= 8,
  142. }"
  143. @click="
  144. tdClick(
  145. 2,
  146. 4,
  147. riskAssessmentMapInfo[riskPossibilityList[1] + '_' + riskDegreeList[3]]
  148. )
  149. "
  150. >{{
  151. riskAssessmentMapInfo[riskPossibilityList[1] + '_' + riskDegreeList[3]]
  152. | mapFormat
  153. }}</td
  154. >
  155. <td
  156. :class="{
  157. [$style.greenTd]: lowRiskLeft <= 12 && lowRiskRight >= 12,
  158. [$style.yellowTd]: mediumRiskLeft <= 12 && mediumRiskRight >= 12,
  159. [$style.redTd]: heightRiskLeft <= 12 && heightRiskRight >= 12,
  160. }"
  161. @click="
  162. tdClick(
  163. 3,
  164. 4,
  165. riskAssessmentMapInfo[riskPossibilityList[2] + '_' + riskDegreeList[3]]
  166. )
  167. "
  168. >{{
  169. riskAssessmentMapInfo[riskPossibilityList[2] + '_' + riskDegreeList[3]]
  170. | mapFormat
  171. }}</td
  172. >
  173. <td
  174. :class="{
  175. [$style.greenTd]: lowRiskLeft <= 16 && lowRiskRight >= 16,
  176. [$style.yellowTd]: mediumRiskLeft <= 16 && mediumRiskRight >= 16,
  177. [$style.redTd]: heightRiskLeft <= 16 && heightRiskRight >= 16,
  178. }"
  179. @click="
  180. tdClick(
  181. 4,
  182. 4,
  183. riskAssessmentMapInfo[riskPossibilityList[3] + '_' + riskDegreeList[3]]
  184. )
  185. "
  186. >{{
  187. riskAssessmentMapInfo[riskPossibilityList[3] + '_' + riskDegreeList[3]]
  188. | mapFormat
  189. }}</td
  190. >
  191. <td
  192. :class="{
  193. [$style.greenTd]: lowRiskLeft <= 20 && lowRiskRight >= 20,
  194. [$style.yellowTd]: mediumRiskLeft <= 20 && mediumRiskRight >= 20,
  195. [$style.redTd]: heightRiskLeft <= 20 && heightRiskRight >= 20,
  196. }"
  197. @click="
  198. tdClick(
  199. 5,
  200. 4,
  201. riskAssessmentMapInfo[riskPossibilityList[4] + '_' + riskDegreeList[3]]
  202. )
  203. "
  204. >{{
  205. riskAssessmentMapInfo[riskPossibilityList[4] + '_' + riskDegreeList[3]]
  206. | mapFormat
  207. }}</td
  208. >
  209. </tr>
  210. <tr>
  211. <td>{{ riskDegreeList[2] }}</td>
  212. <td>3</td>
  213. <td
  214. :class="{
  215. [$style.greenTd]: lowRiskLeft <= 3 && lowRiskRight >= 3,
  216. [$style.yellowTd]: mediumRiskLeft <= 3 && mediumRiskRight >= 3,
  217. [$style.redTd]: heightRiskLeft <= 3 && heightRiskRight >= 3,
  218. }"
  219. @click="
  220. tdClick(
  221. 1,
  222. 3,
  223. riskAssessmentMapInfo[riskPossibilityList[0] + '_' + riskDegreeList[2]]
  224. )
  225. "
  226. >{{
  227. riskAssessmentMapInfo[riskPossibilityList[0] + '_' + riskDegreeList[2]]
  228. | mapFormat
  229. }}</td
  230. >
  231. <td
  232. :class="{
  233. [$style.greenTd]: lowRiskLeft <= 6 && lowRiskRight >= 6,
  234. [$style.yellowTd]: mediumRiskLeft <= 6 && mediumRiskRight >= 6,
  235. [$style.redTd]: heightRiskLeft <= 6 && heightRiskRight >= 6,
  236. }"
  237. @click="
  238. tdClick(
  239. 2,
  240. 3,
  241. riskAssessmentMapInfo[riskPossibilityList[1] + '_' + riskDegreeList[2]]
  242. )
  243. "
  244. >{{
  245. riskAssessmentMapInfo[riskPossibilityList[1] + '_' + riskDegreeList[2]]
  246. | mapFormat
  247. }}</td
  248. >
  249. <td
  250. :class="{
  251. [$style.greenTd]: lowRiskLeft <= 9 && lowRiskRight >= 9,
  252. [$style.yellowTd]: mediumRiskLeft <= 9 && mediumRiskRight >= 9,
  253. [$style.redTd]: heightRiskLeft <= 9 && heightRiskRight >= 9,
  254. }"
  255. @click="
  256. tdClick(
  257. 3,
  258. 3,
  259. riskAssessmentMapInfo[riskPossibilityList[2] + '_' + riskDegreeList[2]]
  260. )
  261. "
  262. >{{
  263. riskAssessmentMapInfo[riskPossibilityList[2] + '_' + riskDegreeList[2]]
  264. | mapFormat
  265. }}</td
  266. >
  267. <td
  268. :class="{
  269. [$style.greenTd]: lowRiskLeft <= 12 && lowRiskRight >= 12,
  270. [$style.yellowTd]: mediumRiskLeft <= 12 && mediumRiskRight >= 12,
  271. [$style.redTd]: heightRiskLeft <= 12 && heightRiskRight >= 12,
  272. }"
  273. @click="
  274. tdClick(
  275. 4,
  276. 3,
  277. riskAssessmentMapInfo[riskPossibilityList[3] + '_' + riskDegreeList[2]]
  278. )
  279. "
  280. >{{
  281. riskAssessmentMapInfo[riskPossibilityList[3] + '_' + riskDegreeList[2]]
  282. | mapFormat
  283. }}</td
  284. >
  285. <td
  286. :class="{
  287. [$style.greenTd]: lowRiskLeft <= 15 && lowRiskRight >= 15,
  288. [$style.yellowTd]: mediumRiskLeft <= 15 && mediumRiskRight >= 15,
  289. [$style.redTd]: heightRiskLeft <= 15 && heightRiskRight >= 15,
  290. }"
  291. @click="
  292. tdClick(
  293. 5,
  294. 3,
  295. riskAssessmentMapInfo[riskPossibilityList[4] + '_' + riskDegreeList[2]]
  296. )
  297. "
  298. >{{
  299. riskAssessmentMapInfo[riskPossibilityList[4] + '_' + riskDegreeList[2]]
  300. | mapFormat
  301. }}</td
  302. >
  303. </tr>
  304. <tr>
  305. <td>{{ riskDegreeList[1] }}</td>
  306. <td>2</td>
  307. <td
  308. :class="{
  309. [$style.greenTd]: lowRiskLeft <= 2 && lowRiskRight >= 2,
  310. [$style.yellowTd]: mediumRiskLeft <= 2 && mediumRiskRight >= 2,
  311. [$style.redTd]: heightRiskLeft <= 2 && heightRiskRight >= 2,
  312. }"
  313. @click="
  314. tdClick(
  315. 1,
  316. 2,
  317. riskAssessmentMapInfo[riskPossibilityList[0] + '_' + riskDegreeList[1]]
  318. )
  319. "
  320. >{{
  321. riskAssessmentMapInfo[riskPossibilityList[0] + '_' + riskDegreeList[1]]
  322. | mapFormat
  323. }}</td
  324. >
  325. <td
  326. :class="{
  327. [$style.greenTd]: lowRiskLeft <= 4 && lowRiskRight >= 4,
  328. [$style.yellowTd]: mediumRiskLeft <= 4 && mediumRiskRight >= 4,
  329. [$style.redTd]: heightRiskLeft <= 4 && heightRiskRight >= 4,
  330. }"
  331. @click="
  332. tdClick(
  333. 2,
  334. 2,
  335. riskAssessmentMapInfo[riskPossibilityList[1] + '_' + riskDegreeList[1]]
  336. )
  337. "
  338. >{{
  339. riskAssessmentMapInfo[riskPossibilityList[1] + '_' + riskDegreeList[1]]
  340. | mapFormat
  341. }}</td
  342. >
  343. <td
  344. :class="{
  345. [$style.greenTd]: lowRiskLeft <= 6 && lowRiskRight >= 6,
  346. [$style.yellowTd]: mediumRiskLeft <= 6 && mediumRiskRight >= 6,
  347. [$style.redTd]: heightRiskLeft <= 6 && heightRiskRight >= 6,
  348. }"
  349. @click="
  350. tdClick(
  351. 3,
  352. 2,
  353. riskAssessmentMapInfo[riskPossibilityList[2] + '_' + riskDegreeList[1]]
  354. )
  355. "
  356. >{{
  357. riskAssessmentMapInfo[riskPossibilityList[2] + '_' + riskDegreeList[1]]
  358. | mapFormat
  359. }}</td
  360. >
  361. <td
  362. :class="{
  363. [$style.greenTd]: lowRiskLeft <= 8 && lowRiskRight >= 8,
  364. [$style.yellowTd]: mediumRiskLeft <= 8 && mediumRiskRight >= 8,
  365. [$style.redTd]: heightRiskLeft <= 8 && heightRiskRight >= 8,
  366. }"
  367. @click="
  368. tdClick(
  369. 4,
  370. 2,
  371. riskAssessmentMapInfo[riskPossibilityList[3] + '_' + riskDegreeList[1]]
  372. )
  373. "
  374. >{{
  375. riskAssessmentMapInfo[riskPossibilityList[3] + '_' + riskDegreeList[1]]
  376. | mapFormat
  377. }}</td
  378. >
  379. <td
  380. :class="{
  381. [$style.greenTd]: lowRiskLeft <= 10 && lowRiskRight >= 10,
  382. [$style.yellowTd]: mediumRiskLeft <= 10 && mediumRiskRight >= 10,
  383. [$style.redTd]: heightRiskLeft <= 10 && heightRiskRight >= 10,
  384. }"
  385. @click="
  386. tdClick(
  387. 5,
  388. 2,
  389. riskAssessmentMapInfo[riskPossibilityList[4] + '_' + riskDegreeList[1]]
  390. )
  391. "
  392. >{{
  393. riskAssessmentMapInfo[riskPossibilityList[4] + '_' + riskDegreeList[1]]
  394. | mapFormat
  395. }}</td
  396. >
  397. </tr>
  398. <tr>
  399. <td>{{ riskDegreeList[0] }}</td>
  400. <td>1</td>
  401. <td
  402. :class="{
  403. [$style.greenTd]: lowRiskLeft <= 1 && lowRiskRight >= 1,
  404. [$style.yellowTd]: mediumRiskLeft <= 1 && mediumRiskRight >= 1,
  405. [$style.redTd]: heightRiskLeft <= 1 && heightRiskRight >= 1,
  406. }"
  407. @click="
  408. tdClick(
  409. 1,
  410. 1,
  411. riskAssessmentMapInfo[riskPossibilityList[0] + '_' + riskDegreeList[0]]
  412. )
  413. "
  414. >{{
  415. riskAssessmentMapInfo[riskPossibilityList[0] + '_' + riskDegreeList[0]]
  416. | mapFormat
  417. }}</td
  418. >
  419. <td
  420. :class="{
  421. [$style.greenTd]: lowRiskLeft <= 2 && lowRiskRight >= 2,
  422. [$style.yellowTd]: mediumRiskLeft <= 2 && mediumRiskRight >= 2,
  423. [$style.redTd]: heightRiskLeft <= 2 && heightRiskRight >= 2,
  424. }"
  425. @click="
  426. tdClick(
  427. 2,
  428. 1,
  429. riskAssessmentMapInfo[riskPossibilityList[1] + '_' + riskDegreeList[0]]
  430. )
  431. "
  432. >{{
  433. riskAssessmentMapInfo[riskPossibilityList[1] + '_' + riskDegreeList[0]]
  434. | mapFormat
  435. }}</td
  436. >
  437. <td
  438. :class="{
  439. [$style.greenTd]: lowRiskLeft <= 3 && lowRiskRight >= 3,
  440. [$style.yellowTd]: mediumRiskLeft <= 3 && mediumRiskRight >= 3,
  441. [$style.redTd]: heightRiskLeft <= 3 && heightRiskRight >= 3,
  442. }"
  443. @click="
  444. tdClick(
  445. 3,
  446. 1,
  447. riskAssessmentMapInfo[riskPossibilityList[2] + '_' + riskDegreeList[0]]
  448. )
  449. "
  450. >{{
  451. riskAssessmentMapInfo[riskPossibilityList[2] + '_' + riskDegreeList[0]]
  452. | mapFormat
  453. }}</td
  454. >
  455. <td
  456. :class="{
  457. [$style.greenTd]: lowRiskLeft <= 4 && lowRiskRight >= 4,
  458. [$style.yellowTd]: mediumRiskLeft <= 4 && mediumRiskRight >= 4,
  459. [$style.redTd]: heightRiskLeft <= 4 && heightRiskRight >= 4,
  460. }"
  461. @click="
  462. tdClick(
  463. 4,
  464. 1,
  465. riskAssessmentMapInfo[riskPossibilityList[3] + '_' + riskDegreeList[0]]
  466. )
  467. "
  468. >{{
  469. riskAssessmentMapInfo[riskPossibilityList[3] + '_' + riskDegreeList[0]]
  470. | mapFormat
  471. }}</td
  472. >
  473. <td
  474. :class="{
  475. [$style.greenTd]: lowRiskLeft <= 5 && lowRiskRight >= 5,
  476. [$style.yellowTd]: mediumRiskLeft <= 5 && mediumRiskRight >= 5,
  477. [$style.redTd]: heightRiskLeft <= 5 && heightRiskRight >= 5,
  478. }"
  479. @click="
  480. tdClick(
  481. 5,
  482. 1,
  483. riskAssessmentMapInfo[riskPossibilityList[4] + '_' + riskDegreeList[0]]
  484. )
  485. "
  486. >{{
  487. riskAssessmentMapInfo[riskPossibilityList[4] + '_' + riskDegreeList[0]]
  488. | mapFormat
  489. }}</td
  490. >
  491. </tr>
  492. <tr>
  493. <td colspan="2" rowspan="2" :class="$style.cptd">
  494. <div :class="$style.cDiv">C</div>
  495. <div :class="$style.pDiv">P</div> </td
  496. ><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td>
  497. </tr>
  498. <tr>
  499. <td>{{ riskPossibilityList[0] }}</td>
  500. <td>{{ riskPossibilityList[1] }}</td>
  501. <td>{{ riskPossibilityList[2] }}</td>
  502. <td>{{ riskPossibilityList[3] }}</td>
  503. <td>{{ riskPossibilityList[4] }}</td></tr
  504. >
  505. </table>
  506. </div>
  507. <div :class="$style.rightDiv">
  508. <div :class="$style.title">风险分布</div>
  509. <div :class="$style.upDiv">
  510. <sd-echart
  511. v-if="chartOptions.series[0].data.length > 0"
  512. ref="chartKey"
  513. :key="chartKey"
  514. :class="$style.chart"
  515. :options="chartOptions"
  516. autoresize
  517. @click="chartClick"
  518. />
  519. <div v-else :class="$style.noDataDiv">
  520. 暂无数据
  521. </div>
  522. </div>
  523. <div :class="$style.downDiv">
  524. <table :class="$style.downTable">
  525. <tr>
  526. <td :class="$style.th">风险等级</td>
  527. <td :class="$style.th">数量</td>
  528. <td :class="$style.th">占比</td>
  529. </tr>
  530. <tr>
  531. <td>高</td>
  532. <td :class="$style.normalTd" @click="tdRightClick('高风险', tableInfo.height)"
  533. ><a>{{ tableInfo.height }}</a></td
  534. >
  535. <td v-if="tableInfo.height === 0">0%</td>
  536. <td v-else>{{ (tableInfo.height / tableInfo.all) | numFormat }}</td>
  537. </tr>
  538. <tr>
  539. <td>中</td>
  540. <td :class="$style.normalTd" @click="tdRightClick('中风险', tableInfo.middle)"
  541. ><a>{{ tableInfo.middle }}</a></td
  542. >
  543. <td v-if="tableInfo.middle === 0">0%</td>
  544. <td v-else>{{ (tableInfo.middle / tableInfo.all) | numFormat }}</td>
  545. </tr>
  546. <tr>
  547. <td>低</td>
  548. <td :class="$style.normalTd" @click="tdRightClick('低风险', tableInfo.down)"
  549. ><a>{{ tableInfo.down }}</a></td
  550. >
  551. <td v-if="tableInfo.down === 0">0%</td>
  552. <td v-else>{{ (tableInfo.down / tableInfo.all) | numFormat }}</td>
  553. </tr>
  554. <tr>
  555. <td>合{{ '\u2003\u2003' }}计</td>
  556. <td
  557. :class="$style.normalTd"
  558. @click="
  559. tdRightClick('合计', tableInfo.height + tableInfo.middle + tableInfo.down)
  560. "
  561. ><a>{{
  562. (tableInfo.height + tableInfo.middle + tableInfo.down) | numFormatStr
  563. }}</a></td
  564. >
  565. <td></td>
  566. </tr>
  567. </table>
  568. </div>
  569. </div>
  570. </div>
  571. </a-spin>
  572. </a-card>
  573. </template>
  574. <script>
  575. import 'echarts/lib/chart/pie'
  576. import 'echarts/lib/chart/gauge'
  577. import 'echarts/lib/component/polar'
  578. import 'echarts/lib/component/legend'
  579. import 'echarts/lib/component/tooltip'
  580. import 'echarts/lib/component/title'
  581. import crossWindowWatcher from '@/common/services/cross-window-watcher'
  582. import { message } from '@/common/one-ui'
  583. import { NUMERIC } from '@chenfengyuan/vue-qrcode'
  584. import riskTasksService from '../risk-tasks-service'
  585. import riskAssessmentMapService from './risk-assessment-map-service'
  586. import components from './_import-components/risk-assessment-map-import'
  587. export default {
  588. name: 'RiskAssessmentMap',
  589. metaInfo: {
  590. title: '风险图谱',
  591. },
  592. components,
  593. filters: {
  594. mapFormat(val) {
  595. if (!val | (val === 0)) return ''
  596. return val
  597. },
  598. numFormat(val) {
  599. if (!val | (val === 'undefined')) return ''
  600. const num = val * 100 + ''
  601. if (num.includes('.')) {
  602. return parseFloat(num).toFixed(1) + '%'
  603. } else {
  604. return num + '%'
  605. }
  606. },
  607. numFormatStr(val) {
  608. if (val !== 0 && !val | (val === 'undefined')) return ''
  609. return val
  610. },
  611. },
  612. data() {
  613. return {
  614. chartKey: 0,
  615. tableInfo: {
  616. hight: '',
  617. middle: '',
  618. down: '',
  619. },
  620. chartOptions: {
  621. color: ['#d9001b', '#8676ff', '#dce0fa'],
  622. tooltip: {
  623. trigger: 'item',
  624. },
  625. legend: {
  626. show: false,
  627. },
  628. series: [
  629. {
  630. name: '风险任务',
  631. type: 'pie',
  632. radius: ['40%', '70%'],
  633. avoidLabelOverlap: false,
  634. itemStyle: {
  635. borderRadius: 100,
  636. borderColor: '#fff',
  637. borderWidth: 2,
  638. },
  639. label: {
  640. show: false,
  641. position: 'center',
  642. },
  643. emphasis: {
  644. label: {
  645. show: true,
  646. fontSize: '40',
  647. fontWeight: 'bold',
  648. },
  649. },
  650. labelLine: {
  651. show: false,
  652. },
  653. data: [],
  654. },
  655. ],
  656. },
  657. spinning: true, // 是否加载中
  658. taskId: null,
  659. selectType: 'GY',
  660. backgroundImg: {
  661. backgroundImage: 'url(' + require('./semiquantitativeRiskMap.png') + ' )',
  662. },
  663. riskAssessmentMapInfo: {},
  664. riskDegreeList: [], // 风险影响程度
  665. riskPossibilityList: [], // 发生可能性
  666. lowRiskLeft: 0,
  667. lowRiskRight: 0,
  668. mediumRiskLeft: 0,
  669. mediumRiskRight: 0,
  670. heightRiskLeft: 0,
  671. heightRiskRight: 0,
  672. }
  673. },
  674. mounted() {
  675. // 获取风险任务ID
  676. this.taskId = parseFloat(this.$route.query.taskId)
  677. // 根据风险任务ID获取准则
  678. this.getTaskInfo(this.taskId)
  679. },
  680. methods: {
  681. // 风险图谱td点击事件
  682. tdClick(x, y, val) {
  683. const url = `/risk-assessment-map-list?taskId=${this.taskId}&occurPossibilityNum=${x}&riskImpactDegreeNum=${y}&listType=left`
  684. crossWindowWatcher.waitForChanged(url)
  685. },
  686. // 风险分布td点击事件
  687. tdRightClick(val, num) {
  688. if ((num === undefined) | (num === null) | isNaN(num)) return
  689. const url = `/risk-assessment-map-list?taskId=${this.taskId}&recordValue=${val}&listType=right&riskDimension=${this.selectType}`
  690. crossWindowWatcher.waitForChanged(url)
  691. },
  692. // 固有剩余变化时
  693. radioChange(val) {
  694. const data = {
  695. taskId: this.taskId,
  696. riskDimension: this.selectType,
  697. columnValue: 'riskSpread',
  698. }
  699. this.spinning = true
  700. riskAssessmentMapService.getRiskAssessmentMap(data).then((res) => {
  701. if (res.data.data.length !== 0) {
  702. this.tableInfo = {
  703. height: res.data.data[0]['高'],
  704. middle: res.data.data[0]['中'],
  705. down: res.data.data[0]['低'],
  706. all: res.data.data[0]['高'] + res.data.data[0]['中'] + res.data.data[0]['低'],
  707. }
  708. this.chartOptions.series[0].data = []
  709. this.chartOptions.series[0].data.push(
  710. { value: res.data.data[0]['高'], name: '高风险' },
  711. { value: res.data.data[0]['中'], name: '中风险' },
  712. { value: res.data.data[0]['低'], name: '低风险' }
  713. )
  714. } else {
  715. this.tableInfo = {
  716. hight: '',
  717. middle: '',
  718. down: '',
  719. }
  720. this.chartOptions.series[0].data = []
  721. }
  722. this.spinning = false
  723. })
  724. },
  725. // echarts图表点击事件
  726. chartClick(params) {
  727. this.tdRightClick(params.name)
  728. },
  729. // 重置风险评估
  730. resetMap() {
  731. this.spinning = true
  732. riskAssessmentMapService
  733. .resetRiskAssessmentMap(this.taskId)
  734. .then((res) => {
  735. this.getTaskInfo(this.taskId)
  736. })
  737. .catch((err) => {
  738. message.error(err, 1)
  739. this.spinning = false
  740. })
  741. },
  742. // 获取风险任务信息
  743. getTaskInfo(taskId) {
  744. riskTasksService
  745. .getRiskTaskInfo(taskId)
  746. .then((res) => {
  747. const riskCriteriaId = res.data.pageFormData.pageFieldInfos.find((item) => {
  748. return item.name === 'riskCriteriaId'
  749. }).value
  750. return riskTasksService.getRiskCriteriaInfo(parseFloat(riskCriteriaId))
  751. })
  752. .then((res) => {
  753. // 风险等级
  754. const riskLevelEntitys = res.data.pageFormData.pageFieldInfos.find((item) => {
  755. return item.name === 'riskLevelEntitys'
  756. }).value
  757. const riskLevelEntitysObj = JSON.parse(riskLevelEntitys)
  758. this.lowRiskLeft = parseFloat(riskLevelEntitysObj[2].minNum)
  759. this.lowRiskRight = parseFloat(riskLevelEntitysObj[2].maxNum)
  760. this.mediumRiskLeft = parseFloat(riskLevelEntitysObj[1].minNum)
  761. this.mediumRiskRight = parseFloat(riskLevelEntitysObj[1].maxNum)
  762. this.heightRiskLeft = parseFloat(riskLevelEntitysObj[0].minNum)
  763. this.heightRiskRight = parseFloat(riskLevelEntitysObj[0].maxNum)
  764. // 发生可能性 riskPossibilityEntitys 横向
  765. const riskPossibilityEntitys = res.data.pageFormData.pageFieldInfos.find((item) => {
  766. return item.name === 'riskPossibilityEntitys'
  767. }).value
  768. const riskPossibilityEntitysObj = JSON.parse(riskPossibilityEntitys)
  769. this.riskPossibilityList = []
  770. this.riskPossibilityList.push(riskPossibilityEntitysObj[0].definition)
  771. this.riskPossibilityList.push(riskPossibilityEntitysObj[1].definition)
  772. this.riskPossibilityList.push(riskPossibilityEntitysObj[2].definition)
  773. this.riskPossibilityList.push(riskPossibilityEntitysObj[3].definition)
  774. this.riskPossibilityList.push(riskPossibilityEntitysObj[4].definition)
  775. // 风险影响程度 riskDegreeEntitys 纵向
  776. const riskDegreeEntitys = res.data.pageFormData.pageFieldInfos.find((item) => {
  777. return item.name === 'riskDegreeEntitys'
  778. }).value
  779. const riskDegreeEntitysObj = JSON.parse(riskDegreeEntitys)
  780. this.riskDegreeList = []
  781. this.riskDegreeList.push(riskDegreeEntitysObj[0].score1)
  782. this.riskDegreeList.push(riskDegreeEntitysObj[0].score2)
  783. this.riskDegreeList.push(riskDegreeEntitysObj[0].score3)
  784. this.riskDegreeList.push(riskDegreeEntitysObj[0].score4)
  785. this.riskDegreeList.push(riskDegreeEntitysObj[0].score5)
  786. // 获取风险图谱
  787. const data = {
  788. taskId: this.taskId,
  789. columnValue: 'riskChart',
  790. }
  791. return riskAssessmentMapService.getRiskAssessmentMap(data)
  792. })
  793. .then((res) => {
  794. this.riskAssessmentMapInfo = {}
  795. if (res.data.data.length !== 0) {
  796. this.riskAssessmentMapInfo = res.data.data[0]
  797. }
  798. // 获取右侧图表内容
  799. const data = {
  800. taskId: this.taskId,
  801. riskDimension: this.selectType,
  802. columnValue: 'riskSpread',
  803. }
  804. return riskAssessmentMapService.getRiskAssessmentMap(data)
  805. })
  806. .then((res) => {
  807. this.tableInfo = {}
  808. this.chartOptions.series[0].data = []
  809. if (res.data.data.length !== 0) {
  810. this.tableInfo = {
  811. height: res.data.data[0]['高'],
  812. middle: res.data.data[0]['中'],
  813. down: res.data.data[0]['低'],
  814. all: res.data.data[0]['高'] + res.data.data[0]['中'] + res.data.data[0]['低'],
  815. }
  816. this.chartOptions.series[0].data.push(
  817. { value: res.data.data[0]['高'], name: '高风险' },
  818. { value: res.data.data[0]['中'], name: '中风险' },
  819. { value: res.data.data[0]['低'], name: '低风险' }
  820. )
  821. }
  822. this.spinning = false
  823. })
  824. },
  825. },
  826. }
  827. </script>
  828. <style module lang="scss">
  829. @use '@/common/design' as *;
  830. .top-div {
  831. .title {
  832. font-size: 20px;
  833. font-weight: bold;
  834. text-align: center;
  835. }
  836. .radio-div {
  837. display: flex;
  838. justify-content: space-between;
  839. margin: 0px 5% 0 8%;
  840. .radio-text {
  841. font-weight: bold;
  842. }
  843. }
  844. .main-div {
  845. display: flex;
  846. justify-content: center;
  847. padding-top: 20px;
  848. .left-div {
  849. width: 100%;
  850. .left-table {
  851. margin: 20px auto;
  852. td {
  853. cursor: pointer;
  854. height: 100px;
  855. width: 100px;
  856. border: 1px solid #e7e7e7;
  857. text-align: center;
  858. background: #fbfbfb;
  859. font-weight: bold;
  860. }
  861. .cptd {
  862. background-image: linear-gradient(to bottom right, #fbfbfb 50%, #eee, #fbfbfb 51%);
  863. background-repeat: no-repeat;
  864. background-size: contain;
  865. .c-div {
  866. height: 100px;
  867. line-height: 100px;
  868. text-align: left;
  869. padding-left: 20%;
  870. font-size: 45px;
  871. font-weight: bold;
  872. }
  873. .p-div {
  874. height: 100px;
  875. line-height: 100px;
  876. text-align: right;
  877. padding-right: 20%;
  878. font-size: 45px;
  879. font-weight: bold;
  880. }
  881. }
  882. .green-td {
  883. background: #70b603;
  884. color: #fff;
  885. cursor: pointer;
  886. }
  887. .yellow-td {
  888. background: #ffff00;
  889. color: #9d9d9d;
  890. cursor: pointer;
  891. }
  892. .red-td {
  893. background: #d9001b;
  894. color: #fff;
  895. cursor: pointer;
  896. }
  897. }
  898. }
  899. .right-div {
  900. width: 100%;
  901. .up-div {
  902. height: 470px;
  903. .no-data-div {
  904. text-align: center;
  905. padding: 20% 0;
  906. color: #cbcbcb;
  907. font-size: 18px;
  908. }
  909. .chart {
  910. height: 100%;
  911. width: 100%;
  912. }
  913. }
  914. .down-div {
  915. height: 200px;
  916. .down-table {
  917. width: 80%;
  918. margin: auto;
  919. .th {
  920. background: #5c96dd;
  921. color: #fff;
  922. width: 33%;
  923. }
  924. td {
  925. text-align: center;
  926. font-size: 17px;
  927. font-weight: bold;
  928. border: 1px solid #e7e7e7;
  929. background: #fbfbfb;
  930. height: 50px;
  931. }
  932. .normal-td {
  933. cursor: pointer;
  934. }
  935. }
  936. }
  937. }
  938. }
  939. }
  940. </style>