datalist.html 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730
  1. {extend name="common/base"/}
  2. <!-- 主体 -->
  3. {block name="body"}
  4. <div class="p-3">
  5. <div class="gg-form-bar border-t border-x">
  6. <form id="taskForm" class="layui-form" lay-filter="barsearchform">
  7. <div class="layui-input-inline" style="width:100px;">
  8. <select name="project_status" lay-filter="status">
  9. <option value="">项目状态</option>
  10. <option value="1">财政局立项中</option>
  11. <option value="2">审批中</option>
  12. <option value="3">待接收</option>
  13. <option value="4">分配中</option>
  14. <option value="5">作业中</option>
  15. <option value="6">归档中</option>
  16. <option value="7">退审中</option>
  17. <option value="8">已归档</option>
  18. <option value="9">已退审</option>
  19. <option value="100">立项中</option>
  20. <option value="101">审核中</option>
  21. <option value="102">待接收</option>
  22. </select>
  23. </div>
  24. <div class="layui-input-inline" style="width:100px;">
  25. <select id="province" lay-filter="province" name="province">
  26. <option value="">省</option>
  27. </select>
  28. </div>
  29. <div class="layui-input-inline" style="width:100px;">
  30. <select id="city" lay-filter="city" name="city">
  31. <option value="">市</option>
  32. </select>
  33. </div>
  34. <div class="layui-input-inline" style="width:100px;">
  35. <select id="area" lay-filter="area" name="area">
  36. <option value="">县</option>
  37. </select>
  38. </div>
  39. <div id="time_date" class="layui-input-inline" style="margin: 0;">
  40. <div class="layui-input-inline" style="width:150px;">
  41. <input type="text" id="start_time" name="project_start_time" readonly placeholder="起始日期"
  42. class="layui-input" value="">
  43. </div>
  44. <div class="layui-input-inline">-</div>
  45. <div class="layui-input-inline" style="width:150px;">
  46. <input type="text" id="end_time" name="project_end_time" readonly placeholder="截止日期"
  47. class="layui-input" value="">
  48. </div>
  49. </div>
  50. <div class="layui-input-inline" style="width:200px;">
  51. <input type="text" name="sent_review_unit_name" placeholder="送审单位" class="layui-input"
  52. autocomplete="off"/>
  53. </div>
  54. <div class="layui-input-inline" style="width:200px;">
  55. <input type="text" name="review_unit_name" placeholder="评审机构" class="layui-input"
  56. autocomplete="off"/>
  57. </div>
  58. <div class="layui-input-inline" style="width:200px;">
  59. <input type="text" name="keyword" placeholder="项目名称关键字" class="layui-input" autocomplete="off"/>
  60. </div>
  61. <div class="layui-input-inline" style="width:150px;">
  62. <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform"><i
  63. class="layui-icon layui-icon-search mr-1"></i>搜索
  64. </button>
  65. <button class="layui-btn layui-btn-reset" lay-submit="" lay-filter="reset1">清空</button>
  66. </div>
  67. </form>
  68. </div>
  69. <table class="layui-hide" id="cost_project" lay-filter="cost_project"></table>
  70. </div>
  71. <script type="text/html" id="toolbarDemo">
  72. <div class="layui-btn-container">
  73. <span class="layui-btn layui-btn-sm" lay-event="add" data-title="添加造价项目">+ 添加造价项目</span>
  74. </div>
  75. </script>
  76. <script type="text/html" id="barDemo">
  77. </script>
  78. {/block}
  79. <!-- /主体 -->
  80. <!-- 脚本 -->
  81. {block name="script"}
  82. <script>
  83. const moduleInit = ['tool', 'oaTool'];
  84. const field = {:json_encode($field)};
  85. function gouguInit() {
  86. var table = layui.table, tool = layui.tool, form = layui.form, oaTool = layui.oaTool;
  87. var allcount;
  88. layui.laydate.render({
  89. elem: '#time_date',
  90. range: ['#start_time', '#end_time'],
  91. rangeLinked: true
  92. });
  93. layui.pageTable = table.render({
  94. elem: '#cost_project',
  95. id: "demo",
  96. title: '造价项目列表',
  97. toolbar: '#toolbarDemo',
  98. url: '/admin/project.cost/datalist',
  99. page: true,
  100. limit: 20,
  101. cellMinWidth: 100,
  102. parseData: function (res) { // 数据解析回调函数
  103. // 在这里可以获取数据总数
  104. allcount = res.count;
  105. return {
  106. code: res.code, // 数据状态码
  107. msg: res.msg, // 状态信息
  108. count: res.count, // 数据总数
  109. data: res.data // 当前页数据
  110. };
  111. },
  112. cols: [
  113. [
  114. {
  115. fixed: 'left', field: 'id', title: '编号', align: 'center', width: 80,
  116. templet: function (d) {
  117. return allcount - (d.LAY_NUM - 1);
  118. }
  119. },
  120. {
  121. fixed: 'left',
  122. field: 'project_status',
  123. title: '项目状态',
  124. align: 'center',
  125. width: 100,
  126. hide: field.project_status,
  127. templet: function (item) {
  128. var html = '';
  129. if (item.project_status === 1) {
  130. html = '<span class="layui-badge layui-bg-orange" style="background-color: #ffb800 !important">立项中</span> ';
  131. } else if (item.project_status === 2) {
  132. html = '<span class="layui-badge layui-bg-blue" style="background-color: #b30095 !important">审批中</span> ';
  133. } else if (item.project_status === -1) {
  134. html = '<span class="layui-badge layui-bg-red" style="background-color: #5825aa !important">待修改</span> ';
  135. } else if (item.project_status === 3) {
  136. html = '<span class="layui-badge layui-bg-green" style="background-color: #d37000 !important">待接收</span> ';
  137. } else if (item.project_status === 4) {
  138. html = '<span class="layui-badge" style="background-color: #005fa8 !important">分配中</span> ';
  139. } else if (item.project_status === 5) {
  140. html = '<span class="layui-badge layui-bg-blue" style="background-color: #1e9fff !important">作业中</span> ';
  141. } else if (item.project_status === 6) {
  142. html = '<span class="layui-badge" style="background-color: #007244 !important">归档中</span> ';
  143. } else if (item.project_status === 7) {
  144. html = '<span class="layui-badge" style="background-color: #881f1f !important">退审中</span> ';
  145. } else if (item.project_status === 8) {
  146. html = '<span class="layui-badge" style="background-color: #16b777 !important">已归档</span> ';
  147. } else if (item.project_status === 9) {
  148. html = '<span class="layui-badge" style="background-color: #d81e06 !important">已退审</span> ';
  149. }
  150. return html;
  151. }
  152. },
  153. {
  154. fixed: 'left',
  155. field: 'report_status',
  156. title: '报告状态',
  157. align: 'center',
  158. width: 100,
  159. hide: false,
  160. templet: function (item) {
  161. var html;
  162. if (item.report_status === 0) {
  163. html = '<span>初稿中</span> ';
  164. } else if (item.report_status === 1) {
  165. html = '<span>对数中</span> ';
  166. } else if (item.report_status === 2) {
  167. html = '<span>审定中</span> ';
  168. } else if (item.report_status === 3) {
  169. html = '<span>已审定</span> ';
  170. }else {
  171. html = '<span >未知</span> ';
  172. }
  173. return html;
  174. }
  175. },
  176. {
  177. fixed: 'left',
  178. field: 'project_name',
  179. title: '项目名称',
  180. align: 'center',
  181. width: 400,
  182. hide: field.project_name,
  183. templet: function (d) {
  184. var html = "";
  185. if (d.red) {
  186. //判断是否有新消息,有就有new
  187. html = '<a class="side-a" lay-event="read" lay-event="read">' + d.project_name + ' <span class="layui-badge-dot hongdian"></span></a>';
  188. } else {
  189. html = '<a class="side-a" lay-event="read" lay-event="read">' + d.project_name + '</a>';
  190. }
  191. return '<div style="text-align:left;">' + html + '</div>'
  192. }
  193. },
  194. {
  195. field: 'project_num', title: '项目编号', align: 'center', width: 150, hide: field.project_num,
  196. templet: function (d) {
  197. return '<div style="text-align:left">' + d.project_num + '</div>'
  198. }
  199. },
  200. {
  201. field: 'project_time', title: '项目周期', align: 'center', width: 250, hide: field.project_time,
  202. templet: function (item) {
  203. if(!item.project_end_time && !item.project_start_time){
  204. return "";
  205. }
  206. let outcome = Math.round(new Date().getTime() / 1000).toString();
  207. var advent_time = item.project_end_time - outcome
  208. var time = getDuration(advent_time);
  209. var timestr = "<span style='color: green'>" + "剩余" + time + "</span>";
  210. if (advent_time < 0) {
  211. advent_time = -advent_time;
  212. time = getDuration(advent_time);
  213. timestr = "<span style='color: red'>" + "逾期" + time + "</span>";
  214. }
  215. var html;
  216. if (item.project_status == 8 || item.project_status == 9 ){
  217. html =
  218. "<div>" +
  219. layui.util.toDateString(item.project_start_time * 1000, 'yyyy-MM-dd') +
  220. "至" +
  221. layui.util.toDateString(item.project_end_time * 1000, 'yyyy-MM-dd') +
  222. "</div>";
  223. }else{
  224. html =
  225. "<div>" +
  226. layui.util.toDateString(item.project_start_time * 1000, 'yyyy-MM-dd') +
  227. "至" +
  228. layui.util.toDateString(item.project_end_time * 1000, 'yyyy-MM-dd') +
  229. "&nbsp;&nbsp;" + timestr +
  230. "</div>";
  231. }
  232. function getDuration(second) {
  233. var duration
  234. var days = Math.floor(second / 86400);
  235. var hours = Math.floor((second % 86400) / 3600);
  236. if (days > 0) duration = days + "天";
  237. else if (hours > 0) duration = "不足一天";
  238. else if (hours == 0) duration = "不足一天";
  239. return duration;
  240. }
  241. return html;
  242. }
  243. },
  244. {
  245. field: 'review_unit_name',
  246. title: '评审机构',
  247. align: 'center',
  248. width: 150,
  249. hide: field.review_unit
  250. },
  251. {
  252. field: 'review_head_name',
  253. title: '评审机构负责人',
  254. align: 'center',
  255. width: 150,
  256. hide: field.review_head
  257. },
  258. {
  259. field: 'review_head_phone',
  260. title: '评审机构负责人电话',
  261. align: 'center',
  262. width: 150,
  263. hide: field.review_head_phone,
  264. },
  265. {
  266. field: 'sent_review_unit_name',
  267. title: '送审单位',
  268. align: 'center',
  269. width: 150,
  270. hide: field.sent_review_unit
  271. },
  272. {
  273. field: 'sent_review_head_name',
  274. title: '送审单位负责人',
  275. align: 'center',
  276. width: 150,
  277. hide: field.sent_review_head
  278. },
  279. {
  280. field: 'sent_review_phone',
  281. title: '送审单位负责人电话',
  282. align: 'center',
  283. width: 150,
  284. hide: field.sent_review_phone
  285. },
  286. {
  287. field: 'construction_unit',
  288. title: '施工单位',
  289. align: 'center',
  290. width: 150,
  291. hide: field.construction_unit
  292. },
  293. {
  294. field: 'construction_head',
  295. title: '施工单位负责人',
  296. align: 'center',
  297. width: 150,
  298. hide: field.construction_head
  299. },
  300. {
  301. field: 'construction_phone',
  302. title: '施工单位负责人电话',
  303. align: 'center',
  304. width: 150,
  305. hide: field.construction_phone
  306. },
  307. {field: 'project_scale', title: '项目规模', align: 'center', width: 150, hide: field.project_scale},
  308. {
  309. field: 'engineering_category',
  310. title: '工程类别',
  311. align: 'center',
  312. width: 150,
  313. hide: field.engineering_category
  314. },
  315. {
  316. field: 'engineering_type',
  317. title: '项目类型',
  318. align: 'center',
  319. width: 150,
  320. hide: field.engineering_type
  321. },
  322. {
  323. field: 'project_region',
  324. title: '项目区域',
  325. align: 'center',
  326. width: 150,
  327. hide: field.project_region
  328. },
  329. {field: 'fiscal_nature', title: '财政性质', align: 'center', width: 150, hide: field.fiscal_nature},
  330. {
  331. field: 'sent_review_cost',
  332. title: '送审服务费',
  333. align: 'center',
  334. width: 100,
  335. hide: field.sent_review_cost
  336. },
  337. {
  338. field: 'sent_review_approver_amount',
  339. title: '送审单位承担审核费',
  340. align: 'center',
  341. width: 150,
  342. hide: field.sent_review_approver_amount
  343. },
  344. {
  345. field: 'construction_approver_amount',
  346. title: '施工单位负责核减超5%评审费部分',
  347. align: 'center',
  348. width: 230,
  349. hide: field.construction_approver_amount
  350. },
  351. {
  352. field: 'sent_review_amount',
  353. title: '送审金额',
  354. align: 'center',
  355. width: 150,
  356. hide: field.sent_review_amount
  357. },
  358. {
  359. field: 'authorize_amount',
  360. title: '审定金额',
  361. align: 'center',
  362. width: 150,
  363. hide: field.authorize_amount
  364. },
  365. {
  366. field: 'review_add_amount',
  367. title: '审增额',
  368. align: 'center',
  369. width: 150,
  370. hide: field.review_add_reduce_amount
  371. },
  372. {
  373. field: 'review_reduce_amount',
  374. title: '审减额',
  375. align: 'center',
  376. width: 150,
  377. hide: field.review_add_reduce_amount
  378. },
  379. {
  380. field: 'review_add_reduce_rate',
  381. title: '审增减率',
  382. align: 'center',
  383. width: 150,
  384. hide: field.review_add_reduce_rate
  385. },
  386. {
  387. field: 'report_time',
  388. title: '报告时间',
  389. align: 'center',
  390. width: 150,
  391. hide: field.report_time,
  392. templet: function (d) {
  393. if (d.report_time) {
  394. return layui.util.toDateString(d.report_time * 1000, "yyyy-MM-dd")
  395. } else {
  396. return "";
  397. }
  398. }
  399. },
  400. {
  401. field: 'charge_standard',
  402. title: '收费标准',
  403. align: 'center',
  404. width: 150,
  405. hide: field.charge_standard
  406. },
  407. {
  408. field: 'operate_head_name',
  409. title: '作业负责人',
  410. align: 'center',
  411. width: 150,
  412. hide: field.operate_name
  413. },
  414. {
  415. field: 'operate_team_names',
  416. title: '作业成员',
  417. align: 'center',
  418. width: 300,
  419. hide: field.operate_team_names
  420. },
  421. {
  422. field: 'creator',
  423. title: '创建人',
  424. align: 'center',
  425. width: 150,
  426. },
  427. {
  428. field: 'create_time',
  429. title: '项目创建日期',
  430. align: 'center',
  431. width: 180,
  432. hide: field.create_time,
  433. },
  434. {
  435. field: 'project_dead_time',
  436. title: '项目归档日期',
  437. align: 'center',
  438. width: 120,
  439. hide: field.project_dead_time,
  440. templet: function (d) {
  441. if (d.project_dead_time) {
  442. return layui.util.toDateString(d.project_dead_time * 1000, "yyyy-MM-dd")
  443. } else {
  444. return "";
  445. }
  446. }
  447. },
  448. {
  449. fixed: 'right', field: 'right', title: '操作', width: 136, align: 'center',
  450. templet: function (a) {
  451. var h = '';
  452. // 1全部-可查看可编辑,2全部-可查看,0与我有关
  453. if (a.self_id == 1) {
  454. if (a.project_status == 1) {
  455. h = '<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></div>'
  456. } else {
  457. h = '<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a></div>'
  458. }
  459. } else if (a.self_id == 2) {
  460. h = '<div class="layui-btn-group"><a class="layui-btn layui-btn-xs layui-bg-blue" lay-event="read">查看</a></div>'
  461. } else if (a.self_id == 0 || a.self_id == 3) {
  462. if (a.project_status == 1) {
  463. h = '<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></div>'
  464. } else {
  465. h = '<div class="layui-btn-group"><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a></div>'
  466. }
  467. }
  468. return h;
  469. }
  470. }
  471. ]
  472. ]
  473. });
  474. //监听表头工具栏事件
  475. table.on('toolbar(cost_project)', function (obj) {
  476. if (obj.event === 'add') {
  477. tool.side("/admin/project.cost/add");
  478. return false;
  479. }
  480. });
  481. //监听表格行工具事件
  482. table.on('tool(cost_project)', function (obj) {
  483. var data = obj.data;
  484. if (obj.event === 'read') {
  485. tool.side('/admin/project.cost/read?id=' + obj.data.id);
  486. } else if (obj.event === 'edit') {
  487. if (obj.data.project_status < 6) {
  488. tool.side('/admin/project.cost/edit?id=' + obj.data.id);
  489. } else {
  490. layer.msg("已归档/已退审")
  491. }
  492. } else if (obj.event === 'del') {
  493. layer.confirm('确定要删除该记录吗?', {
  494. icon: 3,
  495. title: '提示'
  496. }, function (index) {
  497. if (data.project_status == 1) {
  498. let callback = function (e) {
  499. layer.msg(e.msg);
  500. if (e.code == 0) {
  501. obj.del();
  502. }
  503. }
  504. tool.delete("/admin/project.cost/del", {id: data.id}, callback);
  505. layer.close(index);
  506. } else {
  507. layer.msg("已审核,无法删除");
  508. }
  509. });
  510. }
  511. return false;
  512. });
  513. //监听搜索提交
  514. form.on('submit(webform)', function (data) {
  515. // console.log(data.field)
  516. layui.pageTable.reload({where: data.field});
  517. return false;
  518. });
  519. form.on('submit(reset1)', function () {
  520. $(".layui-form").reset();
  521. layui.pageTable.reload();
  522. return false;
  523. });
  524. layui.use(['form', 'jquery'], function () {
  525. var form = layui.form;
  526. const $ = layui.jquery;
  527. let adress;
  528. $.ajax({
  529. type: "get", //使用get方式
  530. url: "/static/assets/layui/adress.json", //json文件相对于这个HTML的路径
  531. dataType: "json",
  532. async: false,
  533. success: function (data) {
  534. //这个data就是json数据
  535. adress = data
  536. var province = Object.keys(adress)
  537. var proStrs = '<option value="">省</option>';
  538. for (var i = 0; i < province.length; i++) {
  539. proStrs += '<option value="' + province[i] + '">' + province[i] + '</option>';
  540. }
  541. $("#province").html(proStrs);
  542. layui.form.render("select")
  543. },
  544. error: function () {
  545. layer.alert("地址请求失败!! ");
  546. }
  547. });
  548. function getFirstAttr(obj) {
  549. for (var k in obj) return k;
  550. }
  551. function selectOption(selectedProvince, selectedCity = '', selectedArea = '') {
  552. var proStr = '<option value="">省</option>', cityStr = '<option value="">市</option>',
  553. areaStr = '<option value="">县</option>';
  554. var pro = adress[selectedProvince], ci = adress[selectedProvince][selectedCity];
  555. for (var province in adress) {
  556. if (province == selectedProvince) proStr += '<option value="' + province + '" selected>' + province + '</option>';
  557. else proStr += '<option value="' + province + '">' + province + '</option>';
  558. }
  559. $("#province").html(proStr);
  560. for (var city in pro) {
  561. if (city == selectedCity) cityStr += '<option value="' + city + '" selected>' + city + '</option>';
  562. else cityStr += '<option value="' + city + '">' + city + '</option>';
  563. }
  564. $("#city").html(cityStr);
  565. for (var area in ci) {
  566. if (area == "remove") {
  567. continue;
  568. }
  569. if (ci[area] == selectedArea) areaStr += '<option value="' + ci[area] + '" selected>' + ci[area] + '</option>';
  570. else areaStr += '<option value="' + ci[area] + '">' + ci[area] + '</option>';
  571. }
  572. $("#area").html(areaStr);
  573. form.render();
  574. }
  575. /*selectOption(1,2, 3);*/
  576. form.on('select(province)', function (data) {
  577. let thisProvince = data.value;
  578. let thisCity = getFirstAttr(adress[thisProvince]);
  579. selectOption(data.value);
  580. });
  581. form.on('select(city)', function (data) {
  582. selectOption($("#province").val(), data.value, getFirstAttr(data.value));
  583. });
  584. window.hongdianselect = function () {
  585. let num = $(document).find('.hongdian').length
  586. console.log(num, '我是数量')
  587. if (num === 0) {
  588. parent.showhongdian()
  589. console.log('2执行了')
  590. }
  591. }
  592. })
  593. }
  594. </script>
  595. <!--<script src="/static/assets/layui/adress.json"></script>-->
  596. {/block}
  597. <!-- /脚本 -->