projInfo_new.jsp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8" %>
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <jsp:include page="../../common/common-meta-include.jsp"></jsp:include>
  8. <jsp:include page="../../common/common-js-include.jsp"></jsp:include>
  9. <jsp:include page="../../common/common-css-include.jsp"></jsp:include>
  10. <%-- <link rel="stylesheet" type="text/css" href="${WebSite.asset}/css/bigDialog.css" media="all">--%>
  11. <link rel="stylesheet" type="text/css" href="${WebSite.asset}/css/contentIframe.css" media="all">
  12. <link rel="stylesheet" type="text/css" href="${WebSite.asset}/css/bigTable.css" media="all">
  13. <!--[if lt IE 9]>
  14. <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
  15. <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
  16. <![endif]-->
  17. <style type="text/css">
  18. .layui-layer-content,
  19. .layui-layer-iframe iframe,
  20. .layui-layer-iframe{
  21. height: 100% !important;
  22. }
  23. .big-dialog .table_box .table_step th .layui-table-cell,
  24. .table_box .table_step .layui-table-cell{
  25. color: #ffffff;
  26. }
  27. body::-webkit-scrollbar {
  28. display: none;
  29. }
  30. .toolBar {
  31. display: flow-root;
  32. }
  33. .table_box .table_process .layui-table-cell {
  34. display: flex;
  35. flex-direction: column;
  36. /*justify-content: center;*/
  37. }
  38. .layui-table-col-special .layui-table-cell {
  39. display: flex;
  40. flex-direction: row !important;
  41. justify-content: space-between !important;
  42. }
  43. .layui-table-col-special .layui-table-cell .step_red {
  44. background-color: red;
  45. }
  46. .table_box .table_process .step_red:before {
  47. border: 2px solid red;
  48. }
  49. .layui-table-col-special .layui-table-cell .step_yellow {
  50. background-color: yellow;
  51. }
  52. .table_box .table_process .step_yellow:before {
  53. border: 2px solid yellow;
  54. }
  55. .layui-table-col-special .layui-table-cell .step_green {
  56. background-color: green;
  57. }
  58. .table_box .table_process .step_green:before {
  59. border: 2px solid green;
  60. }
  61. .queryTimeType {
  62. margin-top: -9px;
  63. position: absolute;
  64. }
  65. .hiddenParam {
  66. display: none;
  67. }
  68. .morePan {
  69. margin-top: 4px;
  70. position: absolute;
  71. margin-left: 11px;
  72. }
  73. .morePan a {
  74. color: #2C6EC6;
  75. }
  76. .border_line {
  77. width: 100%;
  78. height: 4px;
  79. background: linear-gradient(90deg, #00BCFA 0%, rgba(0, 188, 250, 0) 100%);
  80. margin-bottom: 14px;
  81. }
  82. .layui-layer-setwin .layui-layer-close {
  83. display: none;
  84. background: url(${domain}/asset/css/images/icon-close.png);
  85. background-size: 100% 100%;
  86. }
  87. .table_box {
  88. margin: 0 0 20px 0;
  89. padding: 0;
  90. }
  91. /*.layui-table-view .layui-table td > div {*/
  92. /* height: 80px !important;*/
  93. /*}*/
  94. .layui-table-body::-webkit-scrollbar {
  95. width: 0px;
  96. /*height: 10px;*/
  97. }
  98. .layui-table-box tbody tr:nth-child(2n) {
  99. background-color: #0E356A;
  100. }
  101. .layui-table-box tbody tr:nth-child(2n-1) {
  102. background-color: #0B2F60;
  103. }
  104. .layui-table-box tbody tr:hover{
  105. background-color: #0E356A !important;
  106. }
  107. .layui-layout-admin{
  108. padding: 0 !important;
  109. }
  110. .bigDialogInfo{
  111. overflow: auto;
  112. }
  113. .bigDialogInfo::-webkit-scrollbar{
  114. width: 0 !important;
  115. }
  116. .layui-table-body .layui-table-cell{
  117. padding: 5px !important;
  118. }
  119. .layui-table-header .layui-table-cell{
  120. height: 42px !important;
  121. }
  122. .layui-table-cell .cut {
  123. display: -webkit-box; /* 使用旧版的弹性盒子布局 */
  124. -webkit-box-orient: vertical; /* 设置为垂直方向排列 */
  125. overflow: hidden; /* 隐藏溢出内容 */
  126. text-overflow: ellipsis; /* 使用省略号表示溢出内容 */
  127. -webkit-line-clamp: 2; /* 显示的行数 */
  128. }
  129. </style>
  130. </head>
  131. <body style="z-index: 99999;position: relative">
  132. <div id="app"></div>
  133. <template id="template">
  134. <div class="layui-layout layui-layout-admin big-dialog" style="padding:0">
  135. <!-- 内容区域 -->
  136. <div class="right_title" style="display: none;">
  137. <span class="txt">项目信息台账</span>
  138. <div class="layui-collapse">
  139. <div class="layui-colla-item">
  140. <%-- <h2 class="layui-colla-title">筛选</h2>--%>
  141. <div class="layui-colla-content layui-show">
  142. <form class="layui-form" lay-filter="searchForm">
  143. <input name="neTemp" type="hidden" value="${neTemp }"/>
  144. <input name="isZj" type="hidden" value="${isZj}"/>
  145. <input name="kind" type="hidden" value="${kind }"/>
  146. <input name="otherStatus" type="hidden" value="${projStatus }"/>
  147. <input name="rangeDate" type="hidden" value="${rangeDate }"/>
  148. <%-- <input name="startAmt" type="hidden" value="${minAmt }"/>--%>
  149. <%-- <input name="endAmt" type="hidden" value="${maxAmt }"/>--%>
  150. <input name="startAmt" type="hidden" value="${startAmt }"/>
  151. <input name="endAmt" type="hidden" value="${endAmt }"/>
  152. <input name="propKind" type="hidden" value="${propKind }"/>
  153. <input name="isFix" type="hidden" value="${isFix}"/>
  154. <input name="fixCat" type="hidden" value="${fixCat}"/>
  155. <input name="code" type="hidden" value="${code}"/>
  156. <input name="type" type="hidden" value="${type}"/>
  157. <input name="indusKind" type="hidden" value="${indusKind }"/>
  158. <input name="subjectId" type="hidden" value="${subjectId }"/>
  159. <input name="status" type="hidden" value="${projStatus }"/>
  160. <input name="blSub" type="hidden" value="${blSub }"/>
  161. <input name="sbdw" type="hidden" value="${unitName }"/>
  162. <input name="light" type="hidden" value="${light}"/>
  163. <input name="isYq" type="hidden" value="${isYq}"/>
  164. <input name="zjly" type="hidden" value="${zjly}"/>
  165. <input name="year" type="hidden" value="${year}"/>
  166. <input name="abc" type="hidden" value="${abc}"/>
  167. <input name="isCb" type="hidden" value="${isCb}"/>
  168. <input name="status" type="hidden" value="${status}"/>
  169. </form>
  170. </div>
  171. </div>
  172. </div>
  173. </div>
  174. <div class="table_box">
  175. <div class="table_process" style="position: relative; overflow-y: hidden;">
  176. <div style="position: relative; display: inline-block;" @click="exportExcel">
  177. <div class="export">
  178. <img src="${WebSite.asset}/css/images/left/export.svg"/>
  179. <span>导出</span>
  180. </div>
  181. </div>
  182. <table id="table1" lay-filter="test"></table>
  183. <div id="pagination" class="pagination"></div>
  184. </div>
  185. </div>
  186. </div>
  187. </template>
  188. <script type="text/html" id="subName">
  189. <span title="{{d.subName}}">{{d.subName}}</span>
  190. </script>
  191. <script type="text/html" id="amt">
  192. {{# var computedPer = function(total, now){
  193. return (total == 0) ? 0 : parseInt(now * 100 / total +0.5);
  194. };
  195. }}
  196. <span title="">总投资:{{d.amtTotal}}万元 <br/>
  197. 年度计划投资:{{d.yearPlanAmt}}万元 <br/>
  198. 年度完成投资:{{d.yearEndAmt}}万元( {{computedPer(d.yearPlanAmt, d.yearEndAmt)}} %)</span>
  199. </script>
  200. <script type="text/html" id="date">
  201. <div class="line">{{d.endDate?d.endDate:"--"}}
  202. </div>
  203. <%-- <div title="">--%>
  204. <%-- <div class="line">计划开工:{{d.beginDate}}--%>
  205. <%-- </div>--%>
  206. <%-- <div class="line">计划竣工:{{d.endDate}}--%>
  207. <%-- </div>--%>
  208. <%-- </div>--%>
  209. </script>
  210. <%--<script type="text/html" id="headerToolbar">--%>
  211. <%-- <div class="toolBar">--%>
  212. <%-- <span style="color:#FFDD00;" lay-event="exportExcel">导出</span>--%>
  213. <%-- </div>--%>
  214. <%--</script>--%>
  215. <script type="text/html" id="toolBar">
  216. <div class="toolBar">
  217. <span style="color:#FFDD00;" lay-event="toDetail">项目信息</span>
  218. </div>
  219. </script>
  220. <script type="text/html" id="preInfo">
  221. <div title="" lay-event="preNew" style="cursor: pointer">
  222. <div class="line">办理中的手续:{{d.preProceNum}}个
  223. </div>
  224. <div class="line">已办理完成手续:{{d.preEndNum}}个
  225. </div>
  226. </div>
  227. </script>
  228. <script>
  229. new Vue({
  230. el: "#app",
  231. template: "#template",
  232. data: {
  233. winH: 0,
  234. dataList: [],
  235. startDate: "",
  236. endDate: "",
  237. tableName: 'test',
  238. pageNo: 1,
  239. kind: {},
  240. light: null,
  241. sort: {field: "amtTotal", type: ""},
  242. pageSize: 10
  243. },
  244. mounted: function () {
  245. this.init()
  246. },
  247. methods: {
  248. init: function () {
  249. this.winH = document.body.clientHeight
  250. this.getData();
  251. window.toDetail = this.toDetail;
  252. },
  253. getSearchParams: function () {
  254. var param = layui.form.getValue("searchForm");
  255. if (param.rangeDate) {
  256. param.beginDate = param.rangeDate.split(" ~ ")[0];
  257. param.endDate = param.rangeDate.split(" ~ ")[1];
  258. param.rangeDate = null;
  259. param.year = param.beginDate.substring(0, 4);
  260. }
  261. param.pageNo = this.pageNo;
  262. param.pageSize = this.pageSize;
  263. param.orderBy = this.sort.field;
  264. param.orderType = this.sort.type || null;
  265. return param;
  266. },
  267. getData: function () {
  268. var self = this;
  269. var param = this.getSearchParams();
  270. App.postJson("/api/subInfo/query/queryPage", param, function (res) {
  271. self.dataList = res.rows;
  272. self.loadPage(res.total);
  273. self.loadTable(param);
  274. });
  275. },
  276. exportExcel: function () {
  277. var param = this.getSearchParams();
  278. var url = App.getUrl("/subInfoExport/exportDetailExcel");
  279. console.log(url);
  280. App.common.utils.downFile(url, "POST", param, "项目台账.xlsx", "导出失败");
  281. //App.common.utils.downFile(App.getUrl("/subInfoExport/exportCtTz"), "POST", param, "项目台账.xlsx", "导出失败");
  282. },
  283. loadTable: function (param) {
  284. let self = this;
  285. let columns = [];
  286. switch (param.status){
  287. case '1':
  288. columns = [[ // 设置表头
  289. {field: 'mock1', type: 'numbers', fixed: 'left', align: 'center', title: '序号',width:44},
  290. {field: 'subName', fixed: 'left', title: '项目名称', minWidth: 300, templet: '#subName'},
  291. {field: 'subjectName', title: '项目所在地', minWidth: 100},
  292. {field: 'content', title: '项目建设内容', minWidth: 300,
  293. templet: function (row) {
  294. return row.content ? '<span class="cut" title="' + row.content + '">' + row.content + '</span>' : '';
  295. }
  296. },
  297. {field: 'amtTotal', title: '计划总投资(亿元)', minWidth: 250, templet: d => (d.amtTotal / 10000).toFixed(2) + "亿元"},
  298. {field: 'progress', title: '进展情况', minWidth: 300,
  299. templet: function (row) {
  300. return row.progress ? '<span class="cut" title="' + row.progress + '">' + row.progress + '</span>' : '';
  301. }},
  302. {field: 'remark', title: '备注', width: 200},
  303. {field: 'mock2', title: '操作&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', width: 140, align: 'center', toolbar: '#toolBar', fixed: 'right'}
  304. ]];
  305. break;
  306. case '2':
  307. columns = [[ // 设置表头
  308. {type: 'numbers', align: 'center', width: 44, title: '序号',fixed: 'left'},
  309. {field: 'subName', title: '项目名称', minWidth: 200, templet: '#subName',fixed: 'left'},
  310. {field: 'subjectName', title: '项目所在地', minWidth: 100},
  311. {field: 'content', title: '项目建设内容', minWidth: 300,
  312. templet: function (row) {
  313. return row.content ? '<span class="cut" title="' + row.content + '">' + row.content + '</span>' : '';
  314. }},
  315. {
  316. field: 'amtTotal', title: '计划总投资(亿元)', width: 80, templet: function (d) {
  317. return (d.amtTotal / 10000).toFixed(2) + "亿元";
  318. }
  319. },
  320. // {field: 'preProceNum', title: '预计开工时间', width: 160, templet: '#date'},
  321. {field: 'xmbaStatus', title: '前期手续办理情况', minWidth: 160, templet: '#preInfo'},
  322. {field: 'remark', title: '备注', minWidth: 245, templet: '#remark'},
  323. {field: 'mock2', title: '操作&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', width: 140, align: 'center', toolbar: '#toolBar', fixed: 'right'}
  324. ]]
  325. break;
  326. case '3':
  327. columns = [[ // 设置表头
  328. {
  329. type: 'numbers',
  330. fixed: 'left',
  331. align: 'center',
  332. title: '序号',
  333. width: 50,
  334. templet: function (row) {
  335. if (row < 10) {
  336. return '0' + row;
  337. } else {
  338. return row;
  339. }
  340. }
  341. },
  342. {field: 'subName', fixed: 'left', title: '项目名称', minWidth: 200, templet: '#subName'},
  343. {field: 'subjectName', title: '项目所在地', width: 100},
  344. {field: 'content', title: '项目建设内容', width: 300,
  345. templet: function (row) {
  346. return row.content ? '<span class="cut" title="' + row.content + '">' + row.content + '</span>' : '';
  347. }},
  348. {
  349. field: 'amtTotal', title: '计划总投资(亿元)', width: 80, templet: function (d) {
  350. return (d.amtTotal / 10000).toFixed(2) + "亿元";
  351. }
  352. },
  353. {field: 'endDate', title: '建成投产时间', width: 100,templet: '#date'},
  354. {field: 'yearPlanAmt', title: '年度投资(万元)', width: 100},
  355. {field: 'progress', title: '进展情况', width: 300,
  356. templet: function (row) {
  357. return row.progress ? '<span class="cut" title="' + row.progress + '">' + row.progress + '</span>' : '';
  358. }},
  359. {field: 'remark', title: '备注', width: 200},
  360. {field: 'mock2', title: '操作&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', width: 140, align: 'center', toolbar: '#toolBar', fixed: 'right'}
  361. ]]
  362. break;
  363. case '9':
  364. columns = [[ // 设置表头
  365. {type: 'numbers', fixed: 'left', align: 'center', title: '序号', width: 44},
  366. {field: 'subName', fixed: 'left', title: '项目名称', minWidth: 200, templet: '#subName'},
  367. {field: 'subjectName', title: '项目所在地', width: 100},
  368. {field: 'content', title: '项目基本情况', minWidth: 300,
  369. templet: function (row) {
  370. return row.content ? '<span class="cut" title="' + row.content + '">' + row.content + '</span>' : '';
  371. }},
  372. {field: 'rtDate', title: '升规入统时间', minWidth: 160,templet: '#date'},
  373. {field: 'progress', title: '进展情况', minWidth: 300,
  374. templet: function (row) {
  375. return row.progress ? '<span class="cut" title="' + row.progress + '">' + row.progress + '</span>' : '';
  376. }},
  377. {field: 'remark', title: '备注', minWidth: 150},
  378. {field: 'mock2', title: '操作&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', width: 140, align: 'center', toolbar: '#toolBar', fixed: 'right'}
  379. ]]
  380. break;
  381. default:
  382. columns = [[
  383. {type: 'numbers', align: 'center', width: 44, title: '序号',fixed: 'left'},
  384. {field: 'subName', title: '项目名称', minWidth: 200, templet: '#subName',fixed: 'left'},
  385. {field: 'subjectName', title: '项目所在地', width: 100},
  386. {field: 'content', title: '建设内容', minWidth: 300,
  387. templet: function (row) {
  388. return row.content ? '<span class="cut" title="' + row.content + '">' + row.content + '</span>' : '';
  389. }},
  390. {
  391. field: 'amtTotal',
  392. title: '总投资',
  393. width: 100,
  394. templet: d => (d.amtTotal / 10000).toFixed(2) + "亿元"
  395. },
  396. {field: 'statusName', title: '状态', width: 160},
  397. {field: 'beginDate', title: '计划开工日期', minWidth: 160},
  398. {field: 'endDate', title: '计划完工日期', minWidth: 160},
  399. {field: 'mock2', title: '操作&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', width: 140, align: 'center', toolbar: '#toolBar', fixed: 'right'}
  400. ]]
  401. break;
  402. }
  403. layui.table.render({
  404. elem: '#table1', // 指定原始表格元素选择器(推荐id选择器)
  405. even: true,
  406. autoSort: false,
  407. // toolbar: '#headerToolbar',
  408. defaultToolbar: [],
  409. initSort: self.sort,
  410. cols: columns,
  411. data: self.dataList,
  412. fixed: true,
  413. height: window.screen.availHeight - 260,
  414. done: function (res, curr, count) {
  415. res.data.forEach(function (item, index) {
  416. if (index % 2 == 0) {
  417. var tr = $('.layui-table-view').find(".layui-table-box tbody tr[data-index='" + index + "']").eq(0).css("background-color", "#0B2F60");
  418. var tr = $('.layui-table-view').find(".layui-table-box tbody tr[data-index='" + index + "']").eq(1).css("background-color", "#123D77");
  419. } else {
  420. var tr = $('.layui-table-view').find(".layui-table-box tbody tr[data-index='" + index + "']").eq(0).css("background-color", "#0E356A");
  421. var tr = $('.layui-table-view').find(".layui-table-box tbody tr[data-index='" + index + "']").eq(1).css("background-color", "#14427F");
  422. }
  423. // $(".layui-table-main tr").each(function (index, val) {
  424. // $($(".layui-table-fixed .layui-table-body tbody tr")[index]).height($(val).height());
  425. // });
  426. $(".layui-table-body tr").resize(function () {
  427. $(".layui-table-body tr").each(function (index, val) {
  428. $($(".layui-table-fixed .layui-table-body table tr")[index]).height($(val).height());
  429. });
  430. });
  431. //初始化高度,使得冻结行表体高度一致
  432. $(".layui-table-body tr").each(function (index, val) {
  433. $($(".layui-table-fixed .layui-table-body table tr")[index]).height($(val).height());
  434. });
  435. });
  436. }
  437. });
  438. layui.table.on('toolbar(' + this.tableName + ')', function (obj) {
  439. var event = obj.event;
  440. self[event].call(this, obj);
  441. });
  442. layui.table.on('tool(' + this.tableName + ')', function (obj) {
  443. var event = obj.event;
  444. self[event].call(this, obj);
  445. });
  446. layui.table.on('sort(' + this.tableName + ')', function (obj) {
  447. self.sort = obj;
  448. self.getData();
  449. return;
  450. })
  451. },
  452. loadPage: function (totalCount) {
  453. var self = this;
  454. layui.laypage.render({
  455. elem: 'pagination',
  456. count: totalCount,
  457. curr: self.pageNo,
  458. limit: self.pageSize,
  459. layout: ['count', 'prev', 'page', 'next', 'skip'],
  460. jump: function (obj, first) {
  461. //首次不执行
  462. if (!first) {
  463. self.pageNo = obj.curr;
  464. self.getData();
  465. }
  466. }
  467. });
  468. },
  469. toDetail: function (obj) {
  470. //详情
  471. var index = top.layer.open({
  472. type: 2,
  473. title: '',
  474. closeBtn: 0,
  475. area: ['1000px', '1000px'],
  476. content: App.getUrl("/subject/subInfo/bigScreenView?isCt=true&layer=true&subId=" + obj.data.id + "&queryYear=" + obj.data.year + "&lastUrl=" + window.location.href),
  477. skin: "bigDialogInfo"
  478. });
  479. top.layui.layer.full(index);
  480. },
  481. search: function () {
  482. var param = layui.form.getValue("searchForm");
  483. window.localStorage.setItem(this.cacheName, JSON.stringify(param));
  484. this.pageNo = 1;
  485. this.getData();
  486. }
  487. }
  488. });
  489. </script>
  490. </body>
  491. </html>