index2.jsp 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  3. <!DOCTYPE html>
  4. <html lang="en">
  5. <head>
  6. <meta charset="UTF-8" />
  7. <meta name="viewport" content="width=device-width, initial-scale=1" />
  8. <jsp:include page="../common/common-js-include.jsp"></jsp:include>
  9. <jsp:include page="../common/common-css-include.jsp"></jsp:include>
  10. <script src="${WebSite.asset}/lib/echarts/5.4.3/echarts.min.js?version=${version}"></script>
  11. <title>统计分析</title>
  12. </head>
  13. <body>
  14. <div class="content" id="app">
  15. <div class="main-layer">
  16. <div class="tab-layer">
  17. <div class="tab-item" v-for="(item,index) in queryParam">
  18. <div class="tab-item-label">{{item.label}}</div>
  19. <div class="tab-item-tiplist">
  20. <template v-for="(it,ind) in item.value">
  21. <div class="tip-item" :class="it.isCheck?'action-tip':''" @click="queryClick(item,it)">
  22. {{it.title}}
  23. <div class="tip-colos" v-if="!it.isAll && it.isCheck">
  24. <div class="text">×</div>
  25. </div>
  26. </div>
  27. </template>
  28. </div>
  29. </div>
  30. </div>
  31. </div>
  32. <div class="status-layer">
  33. <div class="status-title">数据总览</div>
  34. <div class="status-layer-right">
  35. <div class="status-layer-right-box">
  36. <div class="status-item">
  37. <div class="status-text">
  38. <div class="status-text-num">{{otherData.totalNumber|| 0}}</div>
  39. <div class="status-text-unit">个</div>
  40. </div>
  41. <div class="status-label">项目总量</div>
  42. </div>
  43. <div class="status-item">
  44. <div class="status-text">
  45. <div class="status-text-num">{{otherData.cbNumber || 0}}</div>
  46. <div class="status-text-unit">个</div>
  47. </div>
  48. <div class="status-label">储备总量</div>
  49. </div>
  50. <div class="status-item">
  51. <div class="status-text">
  52. <div class="status-text-num">{{otherData.xjNumber||0}}</div>
  53. <div class="status-text-unit">个</div>
  54. </div>
  55. <div class="status-label">新建总量</div>
  56. </div>
  57. <div class="status-item">
  58. <div class="status-text">
  59. <div class="status-text-num">{{otherData.zjNumber||0}}</div>
  60. <div class="status-text-unit">个</div>
  61. </div>
  62. <div class="status-label">在建总量</div>
  63. </div>
  64. <div class="status-item">
  65. <div class="status-text">
  66. <div class="status-text-num">{{otherData.tcNumber||0}}</div>
  67. <div class="status-text-unit">个</div>
  68. </div>
  69. <div class="status-label">投产总量</div>
  70. </div>
  71. </div>
  72. <div class="status-line"></div>
  73. <div class="status-layer-right-box">
  74. <div class="status-item">
  75. <div class="status-text">
  76. <div class="status-text-num">{{otherData.amtTotal||0}}</div>
  77. <div class="status-text-unit">亿元</div>
  78. </div>
  79. <div class="status-label">项目总投资</div>
  80. </div>
  81. <div class="status-item">
  82. <div class="status-text">
  83. <div class="status-text-num">{{otherData.yearAmtTotal||0}}</div>
  84. <div class="status-text-unit">亿元</div>
  85. </div>
  86. <div class="status-label">年度计划投资</div>
  87. </div>
  88. </div>
  89. </div>
  90. </div>
  91. <div class="main-layer-next">
  92. <div class="pieEcarts">
  93. <div class="pieEcarts-title">{{drawData.year}}年各区域占比情况</div>
  94. <div id="areaPieEcarts" style="height: 180px;margin-top: 30px"></div>
  95. </div>
  96. <div class="tabel-box">
  97. <table id="areaTable"></table>
  98. </div>
  99. </div>
  100. <div class="main-layer-next">
  101. <div class="pieEcarts">
  102. <div class="pieEcarts-title">{{drawData.year}}年行业占比情况</div>
  103. <div id="hyPieEcarts" style="height: 180px;margin-top: 30px"></div>
  104. </div>
  105. <div class="tabel-box">
  106. <table id="hyTable"></table>
  107. </div>
  108. </div>
  109. <div class="main-layer-next">
  110. <div class="pieEcarts">
  111. <div class="pieEcarts-title">{{drawData.year}}年按建设性质占比情况</div>
  112. <div id="jsPieEcarts" style="height: 180px;margin-top: 30px"></div>
  113. </div>
  114. <div class="tabel-box">
  115. <table id="jsTable"></table>
  116. </div>
  117. </div>
  118. </div>
  119. <script type="text/html" id="bZb">
  120. <span class="new-roman">{{d.numBZb||0}}%</span>
  121. </script>
  122. <script type="text/html" id="numBl">
  123. {{#if (d.numBl >= 0) { }}
  124. <span class="new-roman" style="color:green;">{{d.numBl||0}}%</span>
  125. {{# } else { }}
  126. <span class="new-roman" style="color:red;">{{d.numBl||0}}%</span>
  127. {{#} }}
  128. </script>
  129. <script type="text/javascript">
  130. new Vue({
  131. el: "#app",
  132. data: {
  133. queryParam: [
  134. {
  135. "label": "按规模",
  136. "queryKey": "key",
  137. "moreChoose": false,
  138. "value": [
  139. {
  140. value: "",
  141. title: "所有",
  142. isAll: true,
  143. isCheck: true
  144. }, {
  145. "value": "1",
  146. "title": "100亿元以上",
  147. "isAll": false,
  148. "isCheck": false
  149. },{
  150. "value": "2",
  151. "title": "50-100亿元以上",
  152. "isAll": false,
  153. "isCheck": false
  154. },{
  155. "value": "3",
  156. "title": "10-50亿元",
  157. "isAll": false,
  158. "isCheck": false
  159. },{
  160. "value": "4",
  161. "title": "10亿元以下",
  162. "isAll": false,
  163. "isCheck": false
  164. }
  165. ]
  166. },
  167. {
  168. "label": "按区域",
  169. "queryKey": "subjectId",
  170. "moreChoose": true,
  171. "value": [
  172. {
  173. value: "",
  174. title: "所有",
  175. isAll: true,
  176. isCheck: true
  177. },
  178. <c:forEach items="${JSDD}" var="js">
  179. {
  180. value : "${js.code}",
  181. title: "${js.title}",
  182. isAll: false,
  183. isCheck: false
  184. },
  185. </c:forEach>
  186. ]
  187. },
  188. {
  189. "label": "按行业",
  190. "queryKey": "indusKind",
  191. "moreChoose": true,
  192. "value": [
  193. {
  194. value: "",
  195. title: "所有",
  196. isAll: true,
  197. isCheck: true
  198. },
  199. <c:forEach items="${HYFL}" var="hy">
  200. {
  201. value : "${hy.code}",
  202. title: "${hy.title}",
  203. isAll: false,
  204. isCheck: false
  205. },
  206. </c:forEach>
  207. ]
  208. },
  209. {
  210. "label": "按性质",
  211. "queryKey": "propKind",
  212. "moreChoose": true,
  213. "value": [
  214. {
  215. value: "",
  216. title: "所有",
  217. isAll: true,
  218. isCheck: true
  219. },
  220. <c:forEach items="${JSXZ}" var="js">
  221. {
  222. value : "${js.code}",
  223. title: "${js.title}",
  224. isAll: false,
  225. isCheck: false
  226. },
  227. </c:forEach>
  228. ]
  229. }
  230. ],
  231. year : [{
  232. value : "",
  233. title: "全部",
  234. isCheck: false,
  235. }],
  236. month: [],
  237. monthChoose: [],
  238. params: {
  239. month: [],
  240. key: "1"
  241. },
  242. varMonth:[],
  243. paramNames: {
  244. },
  245. yearData: {
  246. month: [],
  247. amtLast: [],
  248. amt: []
  249. },
  250. drawData: {
  251. year: new Date().getFullYear()
  252. },
  253. areaData: [],
  254. dimension:"1",
  255. hyData: [],
  256. jsData: [],
  257. tzData: [],
  258. otherData: {},
  259. areaChart: null,
  260. hyChart: null,
  261. jsChart: null,
  262. tzChart: null,
  263. yearEchartTitle: ""
  264. },
  265. mounted : function() {
  266. this.init();
  267. },
  268. methods: {
  269. formatMonth: function(month) {
  270. if(month < 10) {
  271. return "0"+month;
  272. }
  273. return month;
  274. },
  275. init: function() {
  276. var self = this;
  277. this.initChoosedParams();
  278. this.params.year = new Date().getFullYear();
  279. this.doQuery();
  280. window.onresize = function () {
  281. self.resizeEcharts();
  282. };
  283. },
  284. initChoosedParams: function() {
  285. for(var i=0;i<this.queryParam.length;i++) {
  286. var checkValue = this.queryParam[i].value.filter(item=>item.isCheck == true);
  287. this.params[this.queryParam[i].queryKey] = checkValue.flatMap(item=>item.value).join(",");
  288. if(!this.params[this.queryParam[i].queryKey]) {
  289. if(this.queryParam[i].moreChoose) {
  290. this.paramNames[this.queryParam[i].queryKey] = checkValue.flatMap(item=>item.title);
  291. } else {
  292. this.paramNames[this.queryParam[i].queryKey] = checkValue.flatMap(item=>item.title).join(",");
  293. }
  294. }
  295. }
  296. },
  297. setMonth: function(months) {
  298. var self=this;
  299. if(this.params.month.length == 0) {
  300. //没有选中,则选中当前这个节点
  301. this.params.month.push(months);
  302. this.monthChoose.push(months);
  303. } else if(this.params.month.length == 1) {
  304. let oldChooseMonth = this.params.month[0];
  305. if(months == oldChooseMonth) {
  306. //相同则取消
  307. this.params.month = [];
  308. this.monthChoose = [];
  309. } else if(months < oldChooseMonth) {
  310. //小于,则选择该范围
  311. this.params.month.unshift(months);
  312. this.monthChoose = [];
  313. for(var i = months;i<=oldChooseMonth;i++) {
  314. this.monthChoose.push(i);
  315. }
  316. } else if(months > oldChooseMonth) {
  317. //大于,则选择该范围
  318. this.params.month.push(months);
  319. this.monthChoose = [];
  320. for(var i = oldChooseMonth;i<=months;i++) {
  321. this.monthChoose.push(i);
  322. }
  323. }
  324. } else if(this.params.month.length == 2) {
  325. //已经选择两个了
  326. if(months < this.params.month[0]) {
  327. //选择的小于先前最小的
  328. this.params.month[0] = months;
  329. this.monthChoose = [];
  330. for(var i = months;i<=this.params.month[1];i++) {
  331. this.monthChoose.push(i);
  332. }
  333. } else if(months == this.params.month[0]) {
  334. //选择的就是先前选中的最小的
  335. this.monthChoose = [];
  336. this.monthChoose.push(this.params.month[1]);
  337. this.params.month.shift();
  338. } else if(months < this.params.month[1]) {
  339. //选择的是中间节点
  340. this.params.month[1] = months;
  341. this.monthChoose = [];
  342. for(var i = this.params.month[0];i<=this.params.month[1];i++) {
  343. this.monthChoose.push(i);
  344. }
  345. } else if(months == this.params.month[1]) {
  346. //选择的是当前选中的最大的
  347. this.monthChoose = [];
  348. this.monthChoose.push(this.params.month[0]);
  349. this.params.month.splice(1,1);
  350. } else if(months > this.params.month[1]) {
  351. this.params.month.splice(1,1);
  352. this.params.month.push(months);
  353. this.monthChoose = [];
  354. for(var i = this.params.month[0];i<=months;i++) {
  355. this.monthChoose.push(i);
  356. }
  357. }
  358. }
  359. self.doQuery();
  360. },
  361. queryClick: function(query, queryItem) {
  362. var allBuuton;
  363. if(queryItem.isAll) {
  364. //如果是全部按钮
  365. for(var i =0;i<query.value.length;i++) {
  366. if(query.value[i].isAll) {
  367. query.value[i].isCheck = true;
  368. this.params[query.queryKey] = [query.value[i].value];
  369. this.paramNames[query.queryKey] = [];
  370. } else {
  371. query.value[i].isCheck = false;
  372. }
  373. }
  374. } else {
  375. //如果不是全部按钮
  376. if(query.moreChoose) {
  377. console.log(query.queryKey);
  378. this.params[query.queryKey] = [];
  379. this.paramNames[query.queryKey] = [];
  380. //可以多选
  381. queryItem.isCheck = !queryItem.isCheck;
  382. var allButton;
  383. var hasChoose = false;
  384. for(var i =0;i<query.value.length;i++) {
  385. if(query.value[i].isAll) {
  386. allButton = query.value[i];
  387. } else{
  388. hasChoose = hasChoose || query.value[i].isCheck;
  389. if(query.value[i].isCheck) {
  390. this.params[query.queryKey].push(query.value[i].value);
  391. this.paramNames[query.queryKey].push(query.value[i].title);
  392. }
  393. }
  394. }
  395. if(hasChoose) {
  396. allButton.isCheck = false;
  397. } else {
  398. allButton.isCheck = true;
  399. this.params[query.queryKey] = [allButton.value];
  400. this.paramNames[query.queryKey] = [];
  401. }
  402. } else {
  403. //只能单选
  404. var allButton;
  405. var hasChoose = false;
  406. for(var i =0;i<query.value.length;i++) {
  407. if(query.value[i].value == queryItem.value) {
  408. queryItem.isCheck = !queryItem.isCheck;
  409. if(queryItem.isCheck) {
  410. this.params[query.queryKey] = queryItem.value;
  411. this.paramNames[query.queryKey] = queryItem.title;
  412. }
  413. } else {
  414. query.value[i].isCheck = false;
  415. }
  416. if(query.value[i].isAll) {
  417. allButton = query.value[i];
  418. } else{
  419. hasChoose = hasChoose || query.value[i].isCheck;
  420. }
  421. }
  422. if(hasChoose) {
  423. allButton.isCheck = false;
  424. } else {
  425. allButton.isCheck = true;
  426. this.params[query.queryKey] = allButton.value;
  427. this.params[query.queryKey] = "";
  428. }
  429. }
  430. }
  431. this.doQuery();
  432. },
  433. doQuery: function() {
  434. var queryBody = {};
  435. for(var key in this.params) {
  436. if(Array.likeArrayNotString(this.params[key])) {
  437. queryBody[key] = this.params[key].join(",");
  438. } else {
  439. queryBody[key] = this.params[key];
  440. }
  441. }
  442. var self = this;
  443. App.postJson("/api/tzfx/getTjfxData", queryBody, function(res){
  444. self.areaData = res.data.areaData || [];
  445. self.jsData =res.data.jsData || [];
  446. self.hyData = res.data.hyData || [];
  447. self.otherData = res.data
  448. self.showNoData();
  449. self.initArea();
  450. self.initHy();
  451. self.initJs();
  452. });
  453. },
  454. showNoData: function() {
  455. $(".main-layer-next").show();
  456. $(".status-layer").show();
  457. },
  458. hideNoData: function() {
  459. $(".main-layer-next").hide();
  460. $(".status-layer").hide();
  461. },
  462. initArea: function() {
  463. // this.drawPieEcharts(this.areaChart, "#areaPieEcarts", "区域投资占比", this.areaData);
  464. this.drawPieEcharts(this.areaChart, "#areaPieEcarts", "", this.areaData);
  465. this.drawTable("区域", "#areaTable", this.areaData);
  466. },
  467. initHy: function() {
  468. // this.drawPieEcharts(this.hyChart, "#hyPieEcarts", "前8大行业投资占比", this.hyData);
  469. this.drawPieEcharts(this.hyChart, "#hyPieEcarts", "", this.hyData);
  470. this.drawTable("所属行业", "#hyTable", this.hyData);
  471. },
  472. initJs: function() {
  473. // this.drawPieEcharts(this.jsChart, "#jsPieEcarts", "按建设性质", this.jsData);
  474. this.drawPieEcharts(this.jsChart, "#jsPieEcarts", "", this.jsData);
  475. this.drawTable("建设性质", "#jsTable", this.jsData);
  476. },
  477. exportExcel:function (){
  478. window.location.href=App.getUrl("/tjfx/reportWord");
  479. },
  480. drawTable: function(kindName, elem, data) {
  481. var year = this.params.year;
  482. layui.table.render({
  483. elem: elem, // 指定原始表格元素选择器(推荐id选择器)
  484. cols: [[ // 设置表头
  485. { type: 'numbers', title: '序号', width: 44, align: 'center' },
  486. { field: 'kindDesc', title: kindName, align: 'center'},
  487. { field: 'amtJh', title: year+'年计划投资额(万元)', align: 'center', templet: d => '<span class="new-roman">' + d.amtJh + '</span>'},
  488. { field: 'numBZb', title: '进度占比', align: 'center',templet: "#bZb"},
  489. { field: 'numBl', title: '同比增长', align: 'center',templet: "#numBl" },
  490. ]],
  491. limit: data.length,
  492. data: data
  493. });
  494. },
  495. drawPieEcharts: function(vueEcharts, elem, text, data) {
  496. if(vueEcharts == null) {
  497. vueEcharts = echarts.init(document.querySelector(elem));
  498. } else {
  499. vueEcharts.clear();
  500. }
  501. var echartData = [];
  502. for(var i =0;i<data.length;i++) {
  503. echartData.push({
  504. value: data[i].numBZb,
  505. name: data[i].kindDesc
  506. });
  507. }
  508. if(echartData.length == 0) {
  509. echartData.push({value:0,name:''});
  510. }
  511. let option = {
  512. title: {
  513. text: text,
  514. left: 'center',
  515. bottom: '15px',
  516. textStyle: {
  517. fontSize: '12px',
  518. fontWeight: 400
  519. }
  520. },
  521. tooltip: {
  522. trigger: 'item'
  523. },
  524. legend: {
  525. show: false
  526. },
  527. series: [
  528. {
  529. name: text,
  530. type: 'pie',
  531. radius: '50%',
  532. bottom: "40px",
  533. data: echartData,
  534. emphasis: {
  535. itemStyle: {
  536. shadowBlur: 10,
  537. shadowOffsetX: 0,
  538. shadowColor: 'rgba(0, 0, 0, 0.5)'
  539. }
  540. }
  541. }
  542. ]
  543. };
  544. // 使用刚指定的配置项和数据显示图表。
  545. vueEcharts.setOption(option);
  546. } ,
  547. resizeEcharts: function() {
  548. if(this.areaChart) {
  549. this.areaChart.resize();
  550. }
  551. if(this.hyChart) {
  552. this.hyChart.resize();
  553. }
  554. if(this.jsChart) {
  555. this.jsChart.resize();
  556. }
  557. }
  558. }
  559. })
  560. </script>
  561. <style>
  562. * {
  563. padding: 0;
  564. margin: 0;
  565. }
  566. html{
  567. min-width: 960px;
  568. }
  569. .otherYear{
  570. width: 100px;
  571. height: 24px;
  572. background: #FFFFFF;
  573. border-radius: 2px 2px 2px 2px;
  574. border: 1px solid #CCCCCC;
  575. }
  576. input::-webkit-input-placeholder {
  577. color: red;
  578. font-size: 12px;
  579. color: #999999;
  580. padding-left: 5px;
  581. }
  582. .layui-table-header .layui-table th>div,
  583. .layui-table-view .layui-table td>div {
  584. line-height: 42px !important;
  585. }
  586. .layui-table-view .layui-table {
  587. width: 100% !important;
  588. }
  589. .laytable-cell-checkbox,
  590. .laytable-cell-numbers,
  591. .laytable-cell-radio,
  592. .laytable-cell-space {
  593. padding-left: 10px;
  594. }
  595. .content {
  596. width: 100%;
  597. height: 100%;
  598. padding: 20px;
  599. box-sizing: border-box;
  600. }
  601. .action-tip {
  602. background-color: #2C6EC6;
  603. color: #ffffff !important;
  604. border-radius: 5px;
  605. }
  606. .main-layer {
  607. width: 100%;
  608. min-height: 180px;
  609. border: 1px solid #DDDDDD;
  610. padding-bottom: 10px;
  611. }
  612. .action-tabs {
  613. background-color: transparent !important;
  614. }
  615. .main-layer-next {
  616. display: flex;
  617. justify-content: start;
  618. align-items: center;
  619. position: relative;
  620. gap: 10px;
  621. width: 100%;
  622. border: 1px solid #DDDDDD;
  623. margin-top: 20px;
  624. }
  625. .status-line {
  626. height: 100%;
  627. width: 1px;
  628. background-color: #DDDDDD;
  629. }
  630. .status-layer {
  631. margin-top: 20px;
  632. display: flex;
  633. justify-content: center;
  634. width: 100%;
  635. height: 95px;
  636. border-radius: 3px 3px 3px 3px;
  637. border: 1px solid #2B6EC6;
  638. }
  639. .tab-layer {
  640. display: flex;
  641. flex-direction: column;
  642. justify-content: flex-start;
  643. align-content: flex-start;
  644. row-gap: 10px;
  645. padding: 16px 10px;
  646. box-sizing: border-box;
  647. width: 100%;
  648. }
  649. .tab-item {
  650. width: 100%;
  651. display: flex;
  652. justify-content: center;
  653. align-items: flex-start;
  654. gap: 12px;
  655. }
  656. .tab-item-label {
  657. white-space: nowrap;
  658. color: #999999;
  659. font-size: 12px;
  660. padding: 5px;
  661. }
  662. .tab-item-tiplist {
  663. flex-grow: 1;
  664. display: flex;
  665. flex-wrap: wrap;
  666. justify-content: flex-start;
  667. align-content: flex-start;
  668. align-items: center;
  669. row-gap: 5px;
  670. column-gap: 12px;
  671. }
  672. .tip-item {
  673. position: relative;
  674. padding: 2px 5px;
  675. color: #333333;
  676. font-size: 12px;
  677. font-weight: 400;
  678. cursor: pointer;
  679. }
  680. .tip-colos {
  681. position: absolute;
  682. top: 0;
  683. right: 0;
  684. transform: translate(40%, -40%);
  685. display: flex;
  686. justify-content: center;
  687. align-items: center;
  688. width: 10px;
  689. height: 10px;
  690. font-size: 12px;
  691. color: #2B6EC6;
  692. border: 1px solid #2B6EC6;
  693. background-color: #fff;
  694. border-radius: 50%;
  695. cursor: pointer;
  696. }
  697. .tip-colos>.text {
  698. zoom: 0.8;
  699. }
  700. .tab-line {
  701. margin-top: 24px;
  702. width: 100%;
  703. border-top: 1px dashed #ccc;
  704. }
  705. .barEcharts {
  706. display: flex;
  707. flex-direction: column;
  708. align-items: center;
  709. width: 100%;
  710. }
  711. .status-layer-right {
  712. flex-grow: 1;
  713. display: flex;
  714. justify-content: center;
  715. align-items: center;
  716. height: 100%;
  717. }
  718. .status-layer-right-box {
  719. flex: 1;
  720. display: flex;
  721. justify-content: center;
  722. height: 100%;
  723. }
  724. .status-item {
  725. flex: 1;
  726. display: flex;
  727. flex-direction: column;
  728. align-items: center;
  729. justify-content: center;
  730. gap: 7px;
  731. height: 100%;
  732. }
  733. .status-text {
  734. display: flex;
  735. justify-content: center;
  736. align-items: flex-end;
  737. gap: 2px;
  738. }
  739. .status-text-num {
  740. font-size: 24px;
  741. color: #1C56A3;
  742. font-family: "Times New Roman", Times, serif;
  743. }
  744. .status-text-unit {
  745. font-size: 16px;
  746. color: #1C56A3;
  747. }
  748. .status-label {
  749. font-size: 14px;
  750. color: #333333;
  751. line-height: 1px;
  752. }
  753. .echarts-title {
  754. display: flex;
  755. justify-content: center;
  756. align-items: center;
  757. width: 100%;
  758. padding: 22px 0;
  759. color: #2C6EC6;
  760. font-size: 18px;
  761. font-weight: bold;
  762. }
  763. .status-title {
  764. position: relative;
  765. display: flex;
  766. justify-content: center;
  767. align-items: center;
  768. width: 34px;
  769. height: 100%;
  770. font-size: 16px;
  771. color: #FFFFFF;
  772. background-color: #2C6EC6;
  773. writing-mode: vertical-rl;
  774. letter-spacing: 5px;
  775. }
  776. .status-title::before {
  777. content: '';
  778. position: absolute;
  779. right: -1px;
  780. top: 50%;
  781. width: 11px;
  782. height: 11px;
  783. transform: rotate(45deg) translate(0, -50%);
  784. background-color: #2C6EC6;
  785. border-radius: 2px;
  786. }
  787. .pieEcarts {
  788. display: flex;
  789. flex-direction: column;
  790. /*width: 240px;*/
  791. width: 360px;
  792. height: 100%;
  793. }
  794. .pieEcarts-title {
  795. display: flex;
  796. justify-content: center;
  797. align-items: center;
  798. width: 100%;
  799. height: 40px;
  800. font-size: 16px;
  801. font-weight: bold;
  802. color: #1C56A3;
  803. }
  804. #pieEcarts {
  805. flex-grow: 1;
  806. width: 100%;
  807. }
  808. .tabel-box {
  809. width: 100%;
  810. min-width: 110px;
  811. height: calc(100% - 22px) !important;
  812. }
  813. .text-layer {
  814. position: absolute;
  815. top: 0;
  816. right: 0;
  817. width: 249px;
  818. display: flex;
  819. flex-direction: column;
  820. align-content: center;
  821. justify-content: flex-start;
  822. height: 100%;
  823. margin-right: 1px;
  824. margin-top: 1px;
  825. }
  826. .report-tabs {
  827. position: relative;
  828. display: flex;
  829. align-items: flex-end;
  830. justify-content: center;
  831. width: 100%;
  832. height: 32px;
  833. border: 1px solid #DDDDDD;
  834. border-right: none;
  835. border-top: none;
  836. background: #F5F5F5;
  837. }
  838. .tabs-layer {
  839. position: absolute;
  840. bottom: -1px;
  841. display: flex;
  842. justify-content: center;
  843. gap: 20px;
  844. width: 100%;
  845. }
  846. .tabs-layer-item {
  847. display: flex;
  848. flex-direction: column;
  849. gap: 4px;
  850. font-weight: bold;
  851. font-size: 12px;
  852. color: #2B6EC6;
  853. cursor: pointer;
  854. }
  855. .tabs-layer-item-line {
  856. width: 100%;
  857. height: 2px;
  858. border-radius: 2px 2px 2px 2px;
  859. background: #2B6EC6;
  860. }
  861. .text-layer-content {
  862. height: calc(100% - 22px);
  863. overflow: auto;
  864. flex: 1;
  865. padding: 13px;
  866. box-sizing: border-box;
  867. border-left: 1px solid #DDDDDD;
  868. font-size: 14px;
  869. color: #333333;
  870. font-weight: 400;
  871. line-height: 25px;
  872. }
  873. .text-layer-content::-webkit-scrollbar{
  874. height: 0;
  875. width: 0;
  876. }
  877. .layui-table-cell{
  878. padding: 0 !important;
  879. }
  880. .new-roman{
  881. font-family: "Times New Roman", Times, serif;
  882. }
  883. </style>
  884. </body>
  885. </html>