datalist.html 28 KB

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