plate.html 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724
  1. <!DOCTYPE HTML>
  2. <html xmlns:th="http://www.thymeleaf.org"
  3. xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
  4. layout:decorate="~{admin/common/common}">
  5. <head>
  6. <title>板块统计</title>
  7. <style>
  8. /*.chartContent * {*/
  9. /* padding: 0;*/
  10. /* margin: 0;*/
  11. /* }*/
  12. .chartContent .title {
  13. border-left: 5px solid #2B9CF9;
  14. padding: 0 10px;
  15. line-height: 1.5em;
  16. color: #666;
  17. margin: 25px 0 15px;
  18. }
  19. .chartLiContent {
  20. overflow: hidden
  21. }
  22. .chartContent .chartLi {
  23. float: left;
  24. height: 200px;
  25. box-sizing: border-box;
  26. }
  27. .chartContent .tableHead {
  28. background: #2B9CF9;
  29. line-height: 1.5em;
  30. color: #fff;
  31. padding: 10px 0;
  32. text-align: center;
  33. }
  34. .chartContent .tableHead .tableHeadLi {
  35. float: left;
  36. }
  37. .chartContent .tableHead {
  38. overflow: hidden;
  39. }
  40. .chartContent .tableBody {
  41. }
  42. .chartContent .tableBodyLi {
  43. overflow: hidden;
  44. background: #eee;
  45. }
  46. .chartContent .tableBodyLi .liHead {
  47. overflow: hidden;
  48. }
  49. .chartContent .tableBodyLi .liHeadTopTd {
  50. float: left;
  51. line-height: 1.2em;
  52. padding: 5px 0px 5px 0px;
  53. font-size: 14px;
  54. color: #666;
  55. }
  56. .chartContent .tableBodyLi .liHeadTopTd i.close:before {
  57. content: "\e665";
  58. }
  59. .chartContent .tableBodyLi .liBodyLi .td {
  60. float: left;
  61. line-height: 1.2em;
  62. /*padding: 5px;*/
  63. /*color: #666;*/
  64. text-align: center;
  65. display: flex;
  66. align-items: center;
  67. justify-content: center;
  68. min-height: 30px;
  69. }
  70. .table001 * {
  71. padding: 0;
  72. margin: 0;
  73. }
  74. .table001 table, .table001 .table {
  75. display: table;
  76. border-collapse: collapse;
  77. border-spacing: 0;
  78. table-layout: fixed;
  79. }
  80. .table001 table td {
  81. border: 1px solid #999;
  82. padding: 5px;
  83. }
  84. .table001 table thead td {
  85. background: #2B9CF9;
  86. color: #fff;
  87. border-color: #2B9CF9;
  88. padding: 5px 10px;
  89. line-height: 1.5em;
  90. text-align: center;
  91. }
  92. .plate_tab_list {
  93. width: 100%;
  94. margin-top: 15px;
  95. }
  96. .plate_tab_item {
  97. display: inline-block;
  98. float: left;
  99. text-align: center;
  100. border: 1px solid #e2e3e3;
  101. border-right: none;
  102. background-color: #ffffff;
  103. padding: 8px 20px;
  104. cursor: pointer;
  105. }
  106. .plate_tab_item:last-child {
  107. border-right: 1px solid #e2e3e3;
  108. }
  109. .date_tab_list {
  110. width: 100%;
  111. margin-top: 15px;
  112. }
  113. .date_tab_item {
  114. display: inline-block;
  115. float: left;
  116. text-align: center;
  117. border: 1px solid #e2e3e3;
  118. border-right: none;
  119. background-color: #ffffff;
  120. padding: 8px 20px;
  121. cursor: pointer;
  122. }
  123. .active_date {
  124. color: #ffffff;
  125. background-color: #00a0e9;
  126. }
  127. .active_plate {
  128. color: #ffffff;
  129. background-color: #00a0e9;
  130. }
  131. .liBody {
  132. background-color: #ffffff;
  133. }
  134. .liBodyLi {
  135. border-bottom: 1px solid #eaeaea;
  136. }
  137. .clearfix:after { /*伪元素是行内元素 正常浏览器清除浮动方法*/
  138. content: "";
  139. display: block;
  140. height: 0;
  141. clear: both;
  142. visibility: hidden;
  143. }
  144. .clearfix {
  145. *zoom: 1; /*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/
  146. }
  147. </style>
  148. </head>
  149. <body layout:fragment="content">
  150. <nav class="breadcrumb">
  151. <i class="Hui-iconfont">&#xe67f;</i>
  152. 首页
  153. <span class="c-gray en">&gt;</span>
  154. 用地服务
  155. <span class="c-gray en">&gt;</span>
  156. 用地管理统计
  157. <span class="c-gray en">&gt;</span>
  158. 板块统计
  159. </nav>
  160. <div class="plate_tab_list clearfix">
  161. <span class="plate_tab_item active_plate">全部</span>
  162. <span class="plate_tab_item">狮山街道(含横塘)</span>
  163. <span class="plate_tab_item">枫桥街道</span>
  164. <span class="plate_tab_item">浒墅关镇</span>
  165. <span class="plate_tab_item">通安镇</span>
  166. <span class="plate_tab_item">浒墅关经开区</span>
  167. <span class="plate_tab_item">科技城(含东渚)</span>
  168. <span class="plate_tab_item">综合保税区</span>
  169. <span class="plate_tab_item">度假区(含镇湖)</span>
  170. <span class="plate_tab_item">区外</span>
  171. </div>
  172. <div class="chartContent">
  173. </div>
  174. <div class="chartContent">
  175. <div class="title">当前审核状态统计</div>
  176. <div class="chartLiContent">
  177. <div id="pending_pie" class="chartLi" style="width:30%;"></div>
  178. <div id="processing_bar" class="chartLi" style="width:40%;"></div>
  179. <div id="processed_pie" class="chartLi" style="width:30%;"></div>
  180. </div>
  181. </div>
  182. <div class="date_tab_list clearfix">
  183. <span class="date_tab_item">7天</span>
  184. <span class="date_tab_item">14天</span>
  185. <span class="date_tab_item" style="border-right: 1px solid #e2e3e3;">30天</span>
  186. <input type="text" name="starttime" class="form-control" id="starttime">
  187. </div>
  188. <div class="chartContent">
  189. </div>
  190. <div class="chartContent">
  191. <div class="title">每日统计</div>
  192. <div id="daily_type_line" style="width: 1200px; height: 400px"></div>
  193. </div>
  194. <div class="chartContent">
  195. <div class="title">周期分类统计</div>
  196. <div id="monthly_type_bar" style="width: 1200px; height: 400px"></div>
  197. </div>
  198. <div class="chartContent">
  199. <div class="title">月度审核统计表</div>
  200. <input class="Wdate input-text" type="text" th:id="monthly_start_time" th:name="monthly_start_time"
  201. style="float:left; width: 150px;"
  202. onclick="WdatePicker({dateFmt:'yyyy-MM-dd',maxDate:'#F{$dp.$D(\'monthly_end_time\')}',isShowClear:true,readOnly:true,onpicked: function(){getMontylyApproveStatistic()} })"/>
  203. <input class="Wdate input-text" type="text" th:id="monthly_end_time" th:name="monthly_end_time"
  204. style="float:left; width: 150px;"
  205. onclick="WdatePicker({dateFmt:'yyyy-MM-dd',minDate:'#F{$dp.$D(\'monthly_start_time\')}',isShowClear:true,readOnly:true,onpicked: function(){getMontylyApproveStatistic()} })"/>
  206. <a th:onclick="'javascript:exportMonthlyStatistic();'"
  207. class="btn btn-secondary radius" type="button">导出</a>
  208. <div class="table001" style="width: 96%; margin-left: 2%;margin-top:15px;">
  209. <table id="monthly_approve_statistic" th:fragment="approve_statistic_monthly">
  210. <thead>
  211. <tr>
  212. <td>&nbsp;</td>
  213. <td colspan="3">存量工业用地房屋出租</td>
  214. <td colspan="3">存量工业用地用途依法改变</td>
  215. <td colspan="3">存量工业用地不动产权权属转移登记</td>
  216. <td colspan="3">存量工业用地项目公司股权(结构)变更登记</td>
  217. <td colspan="3">汇总</td>
  218. </tr>
  219. <tr>
  220. <td>&nbsp;</td>
  221. <td>提交数</td>
  222. <td>通过数</td>
  223. <td>通过率</td>
  224. <td>提交数</td>
  225. <td>通过数</td>
  226. <td>通过率</td>
  227. <td>提交数</td>
  228. <td>通过数</td>
  229. <td>通过率</td>
  230. <td>提交数</td>
  231. <td>通过数</td>
  232. <td>通过率</td>
  233. <td>提交数</td>
  234. <td>通过数</td>
  235. <td>通过率</td>
  236. </tr>
  237. </thead>
  238. <tbody>
  239. <tr th:each="model,iterStat:${list}" th:object="${model}">
  240. <td th:text="*{rowName}"></td>
  241. <td th:text="*{rentApplyNum}"></td>
  242. <td th:text="*{rentPassNum}"></td>
  243. <td th:text="*{rentPassRate + '%'}"></td>
  244. <td th:text="*{useChangeApplyNum}"></td>
  245. <td th:text="*{useChangePassNum}"></td>
  246. <td th:text="*{useChangePassRate + '%'}"></td>
  247. <td th:text="*{immovablesChangeApplyNum}"></td>
  248. <td th:text="*{immovablesChangePassNum}"></td>
  249. <td th:text="*{immovablesChangePassRate + '%'}"></td>
  250. <td th:text="*{equityStructureChangeApplyNum}"></td>
  251. <td th:text="*{equityStructureChangePassNum}"></td>
  252. <td th:text="*{equityStructureChangePassRate}"></td>
  253. <td th:text="*{totalApplyNum}"></td>
  254. <td th:text="*{totalPassNum}"></td>
  255. <td th:text="*{totalPassRate + '%'}"></td>
  256. </tr>
  257. </tbody>
  258. </table>
  259. </div>
  260. </div>
  261. <script th:inline="javascript">
  262. var streetList = [[${streetList}]]
  263. console.log([[${streetList}]])
  264. getApproveStatus(streetList[3].id);
  265. getDailyStatistic(streetList[3].id, "2018-04-20", "2018-04-30");
  266. getTypeStatistic(streetList[3].id, "", "");
  267. getMontylyApproveStatistic(streetList[3].id);
  268. //当前审核状态统计
  269. function getApproveStatus(streedId) {
  270. $.ajax({
  271. url: pagePath + "/land_statistic/approve/status?street_id=" + streedId,
  272. type: "get",
  273. dataType: "json",
  274. data: {
  275. "timestamp": new Date().getTime(),
  276. },
  277. success: function (result) {
  278. if (result.success) {
  279. // console.log(result.obj)
  280. pendingArray = result.obj.pending;
  281. processingArray = result.obj.processing;
  282. processedArray = result.obj.processed;
  283. var processingXAxisData = new Array();
  284. var processingData = new Array();
  285. for (var argument of processingArray) {
  286. processingXAxisData.push(argument.name);
  287. processingData.push(argument.value);
  288. // console.log(argument)
  289. }
  290. renderPendingPie("待审核", pendingArray, pendingArray);
  291. renderProcessingBar("审核中", processingXAxisData, processingData);
  292. renderProcessedPie("已审核", processedArray, processedArray);
  293. } else {
  294. errorMessage(result.message);
  295. }
  296. },
  297. error: function () {
  298. errorMessage('系统错误!');
  299. }
  300. });
  301. }
  302. //每日状态统计
  303. function getDailyStatistic(streedId, startTime, endTime) {
  304. $.ajax({
  305. url: pagePath + "/land_statistic/approve/statistic/daily?street_id=" + streedId + "&start_time=" + startTime + "&end_time=" + endTime,
  306. type: "get",
  307. dataType: "json",
  308. data: {
  309. "timestamp": new Date().getTime(),
  310. },
  311. success: function (result) {
  312. if (result.success) {
  313. console.log(result.obj)
  314. var data = result.obj.data
  315. var xAxisName = result.obj.xAxisName;
  316. var legendData = new Array();
  317. for (var argument of data) {
  318. legendData.push(argument.name);
  319. }
  320. renderdailyTypeLine(legendData, xAxisName, data);
  321. } else {
  322. errorMessage(result.message);
  323. }
  324. },
  325. error: function () {
  326. errorMessage('系统错误!');
  327. }
  328. });
  329. }
  330. //周期分类统计
  331. function getTypeStatistic(streedId, startTime, endTime) {
  332. $.ajax({
  333. url: pagePath + "/land_statistic/approve/type?street_id=" + streedId + "&start_time" + startTime + "&end_time" + endTime,
  334. type: "get",
  335. dataType: "json",
  336. data: {
  337. "timestamp": new Date().getTime(),
  338. },
  339. success: function (result) {
  340. if (result.success) {
  341. // console.log(result.obj)
  342. var data = result.obj.data
  343. var xAxisName = result.obj.xAxisName;
  344. var legendData = new Array();
  345. for (var argument of data) {
  346. legendData.push(argument.name);
  347. }
  348. renderMonthlyTypeBar(legendData, xAxisName, data);
  349. } else {
  350. errorMessage(result.message);
  351. }
  352. },
  353. error: function () {
  354. errorMessage('系统错误!');
  355. }
  356. });
  357. }
  358. //当前审核状态统计 待审核
  359. function renderPendingPie(title, legendData, data) {
  360. // 基于准备好的dom,初始化echarts实例
  361. var charts = echarts.init(document.getElementById('pending_pie'));
  362. // 指定图表的配置项和数据
  363. var option = {
  364. title: {
  365. text: title,
  366. textStyle: {
  367. fontSize: 18,
  368. fontWeight: 'bold'
  369. }
  370. },
  371. tooltip: {
  372. trigger: 'item',
  373. zlevel: 1,
  374. formatter: '{a} <br/>{b}: {c} ({d}%)'
  375. },
  376. legend: {
  377. orient: 'horizontal',
  378. bottom: 10,
  379. data: legendData
  380. },
  381. series: [
  382. {
  383. name: title,
  384. type: 'pie',
  385. radius: ['50%', '70%'],
  386. avoidLabelOverlap: false,
  387. label: {
  388. normal: {
  389. show: true,
  390. zlevel: 0,
  391. position: 'center',
  392. formatter: function () {
  393. var num = 0;
  394. for (var obj of data) {
  395. num += obj.value;
  396. }
  397. return num;
  398. }
  399. },
  400. emphasis: {
  401. show: false,
  402. textStyle: {
  403. fontSize: '30',
  404. fontWeight: 'bold'
  405. }
  406. }
  407. },
  408. labelLine: {
  409. normal: {
  410. show: false
  411. }
  412. },
  413. data: data
  414. }
  415. ]
  416. };
  417. // 使用刚指定的配置项和数据显示图表。
  418. charts.setOption(option);
  419. }
  420. //当前审核状态统计 审核中
  421. function renderProcessingBar(title, xAxisData, data) {
  422. // 基于准备好的dom,初始化echarts实例
  423. var charts = echarts.init(document.getElementById('processing_bar'));
  424. // 指定图表的配置项和数据
  425. option = {
  426. title: {
  427. text: title,
  428. textStyle: {
  429. fontSize: '18',
  430. fontWeight: 'bold'
  431. }
  432. },
  433. color: ['#3398DB'],
  434. tooltip: {
  435. trigger: 'axis',
  436. axisPointer: { // 坐标轴指示器,坐标轴触发有效
  437. type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
  438. }
  439. },
  440. grid: {
  441. left: '3%',
  442. right: '4%',
  443. bottom: '3%',
  444. containLabel: true
  445. },
  446. xAxis: [
  447. {
  448. type: 'category',
  449. data: xAxisData,
  450. axisTick: {
  451. alignWithLabel: true
  452. }
  453. }
  454. ],
  455. yAxis: [
  456. {
  457. type: 'value'
  458. }
  459. ],
  460. series: [
  461. {
  462. name: '直接访问',
  463. type: 'bar',
  464. barWidth: '60%',
  465. label: {
  466. normal: {
  467. show: true,
  468. position: 'top'
  469. }
  470. },
  471. data: data
  472. }
  473. ]
  474. };
  475. // 使用刚指定的配置项和数据显示图表。
  476. charts.setOption(option);
  477. }
  478. //当前审核状态统计 已审核
  479. function renderProcessedPie(title, legendData, data) {
  480. // 基于准备好的dom,初始化echarts实例
  481. var charts = echarts.init(document.getElementById('processed_pie'));
  482. // 指定图表的配置项和数据
  483. var option = {
  484. title: {
  485. text: title,
  486. textStyle: {
  487. fontSize: '18',
  488. fontWeight: 'bold'
  489. }
  490. },
  491. tooltip: {
  492. trigger: 'item',
  493. zlevel: 1,
  494. formatter: '{a} <br/>{b}: {c} ({d}%)'
  495. },
  496. legend: {
  497. orient: 'horizontal',
  498. bottom: 10,
  499. data: legendData
  500. },
  501. series: [
  502. {
  503. name: title,
  504. type: 'pie',
  505. radius: '70%',
  506. avoidLabelOverlap: false,
  507. label: {
  508. normal: {
  509. show: true,
  510. zlevel: 0,
  511. position: 'top',
  512. formatter: function () {
  513. var num = 0;
  514. for (var obj of data) {
  515. num += obj.value;
  516. }
  517. return num;
  518. }
  519. },
  520. emphasis: {
  521. show: false,
  522. textStyle: {
  523. fontSize: '30',
  524. fontWeight: 'bold'
  525. }
  526. }
  527. },
  528. labelLine: {
  529. normal: {
  530. show: false
  531. }
  532. },
  533. data: data
  534. }
  535. ]
  536. };
  537. // 使用刚指定的配置项和数据显示图表。
  538. charts.setOption(option);
  539. }
  540. //每日统计
  541. function renderdailyTypeLine(legendData, xAxisName, data) {
  542. // 基于准备好的dom,初始化echarts实例
  543. var charts = echarts.init(document.getElementById('daily_type_line'));
  544. // 指定图表的配置项和数据
  545. option = {
  546. // title: {
  547. // text: '折线图堆叠'
  548. // },
  549. tooltip: {
  550. trigger: 'axis'
  551. },
  552. legend: {
  553. data: legendData
  554. },
  555. grid: {
  556. left: '3%',
  557. right: '4%',
  558. bottom: '3%',
  559. containLabel: true
  560. },
  561. toolbox: {
  562. feature: {
  563. saveAsImage: {}
  564. }
  565. },
  566. xAxis: {
  567. type: 'category',
  568. boundaryGap: false,
  569. data: xAxisName
  570. },
  571. yAxis: {
  572. type: 'value'
  573. },
  574. series: data
  575. };
  576. // 使用刚指定的配置项和数据显示图表。
  577. charts.setOption(option);
  578. }
  579. //周期分类统计
  580. function renderMonthlyTypeBar(legendData, xAxisName, data) {
  581. // 基于准备好的dom,初始化echarts实例
  582. var charts = echarts.init(document.getElementById('monthly_type_bar'));
  583. // 指定图表的配置项和数据
  584. option = {
  585. color: ['#003366', '#006699', '#4cabce', '#e5323e'],
  586. tooltip: {
  587. trigger: 'axis',
  588. axisPointer: {
  589. type: 'shadow'
  590. }
  591. },
  592. legend: {
  593. orient: 'vertical',
  594. top: 80,
  595. right: 10,
  596. data: legendData
  597. },
  598. xAxis: [
  599. {
  600. type: 'category',
  601. axisTick: {show: false},
  602. data: xAxisName,
  603. axisLabel: {
  604. interval: 0,
  605. formatter: function (value) {
  606. var ret = '';
  607. var maxLength = 10;
  608. var xAxisName = value.split("\n\n")[0];
  609. var rate = value.split("\n\n")[1];
  610. var rowNum = Math.ceil(xAxisName.length / maxLength);
  611. if (rowNum > 1) {
  612. for (var i = 0; i < rowNum; i++) {
  613. var temp = "";
  614. var start = i * maxLength;
  615. var end = start + maxLength;
  616. temp = xAxisName.substring(start, end) + "\n";
  617. ret += temp;
  618. }
  619. return ret + "\n" + rate;
  620. } else {
  621. return xAxisName + "\n" + rate;
  622. }
  623. }
  624. }
  625. }
  626. ],
  627. yAxis: [{type: 'value'}],
  628. series: data
  629. };
  630. // 使用刚指定的配置项和数据显示图表。
  631. charts.setOption(option);
  632. }
  633. //月度审核统计表
  634. function getMontylyApproveStatistic(streetId) {
  635. streetId = 28
  636. var url = pagePath + "/land_statistic/approve/statistic/monthly"
  637. var start_time = $('#monthly_start_time').val();
  638. var end_time = $('#monthly_end_time').val();
  639. url += "?street_id=" + streetId + "&start_time=" + start_time + "&end_time=" + end_time;
  640. // 装载局部刷新返回的页面
  641. $('#monthly_approve_statistic').load(url);
  642. }
  643. // 点击板块
  644. $('.plate_tab_list .plate_tab_item').click(function(){
  645. console.log('当前点击板块', $(this).html())
  646. $(this).addClass('active_plate').siblings().removeClass("active_plate")
  647. })
  648. // 点击日期
  649. $('.date_tab_list .date_tab_item').click(function(){
  650. console.log('当前点击日期', $(this).html())
  651. $(this).addClass('active_date').siblings().removeClass("active_date")
  652. })
  653. //导出月度统计
  654. function exportMonthlyStatistic() {
  655. streetId = 28;
  656. var start_time = $('#monthly_start_time').val();
  657. var end_time = $('#monthly_end_time').val();
  658. window.open(pagePath + "/land_statistic/approve/statistic/monthly/export?start_time="
  659. + start_time + "&end_time=" + end_time + "&street_id=" + streetId);
  660. }
  661. </script>
  662. </body>
  663. </html>