add_annualbudget.html 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  6. <title>新建</title>
  7. <link rel="stylesheet" th:href="@{/lib/layui/css/layui.css}" media="all">
  8. <link rel="stylesheet" th:href="@{/css/public.css}" media="all">
  9. <link rel="stylesheet" th:href="@{/lib/font-awesome-4.7.0/css/font-awesome.min.css}" media="all">
  10. <style>
  11. body {
  12. background-color: #ffffff;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <form class="layui-form" action="" lay-filter="formDemo">
  18. <div class="layui-tab layui-tab-card">
  19. <ul class="layui-tab-title">
  20. <li class="layui-this">常规</li>
  21. <li>年度预算</li>
  22. </ul>
  23. <div class="layui-tab-content">
  24. <!--常规开始-->
  25. <div class="layui-tab-item layui-show" style="min-height: 550px; margin-bottom: 5px">
  26. <form class="layui-form" action="" lay-filter="formDemo">
  27. <div class="layui-form layuimini-form">
  28. <div class="layui-form-item layui-inline" style="width: 100%">
  29. <label class="layui-form-label required" style="width: 70px">名称</label>
  30. <div class="layui-input-inline" style="width: 855px">
  31. <input type="hidden" id="id" name="id" class="layui-input">
  32. <input type="text" id="mc" name="mc" lay-verify="required" lay-reqtext="名称不能为空"
  33. autocomplete="off" class="layui-input">
  34. </div>
  35. </div>
  36. <div class="layui-form-item layui-inline" style="width: 100%">
  37. <label class="layui-form-label required" style="width: 70px">任务书</label>
  38. <div class="layui-input-inline" style="width: 855px">
  39. <input type="hidden" id="rws" name="rws" class="layui-input" lay-verify="required"
  40. lay-reqtext="任务书不能为空">
  41. <input type="hidden" id="rwsmc" name="rwsmc" class="layui-input">
  42. <select name="ysrws" id="ysrws" lay-filter="ysrws">
  43. <option value="">[无]</option>
  44. <option value="-1">[浏览]</option>
  45. </select>
  46. </div>
  47. </div>
  48. <div class="layui-form-item layui-inline" style="width: 100%">
  49. <label class="layui-form-label" style="width: 70px">项目执行期</label>
  50. <div class="layui-input-inline" style="width: 855px">
  51. <input type="hidden" name="qs" id="qs" class="layui-input">
  52. <input type="hidden" name="wc" id="wc" class="layui-input">
  53. <input type="text" id="xmzxq" name="xmzxq" class="layui-input" readonly>
  54. </div>
  55. </div>
  56. <div class="layui-form-item layui-inline" style="width: 100%">
  57. <label class="layui-form-label required" style="width: 70px">年份</label>
  58. <div class="layui-input-inline" style="width: 855px">
  59. <input type="text" id="nf" name="nf" maxlength="4" class="layui-input"
  60. lay-verify="required" lay-reqtext="年份不能为空" autocomplete="off">
  61. </div>
  62. </div>
  63. <div class="layui-form-item layui-inline" style="display:none;">
  64. <label class="layui-form-label" style="width: 70px">说明</label>
  65. <div class="layui-input-inline" style="width: 855px">
  66. <textarea id="sm" name="sm" class="layui-textarea"
  67. style="width: 100%;height: 150px"></textarea>
  68. </div>
  69. </div>
  70. <div class="layui-form-item layui-inline" style="width: 100%">
  71. <label class="layui-form-label" style="width: 70px">申请人</label>
  72. <div class="layui-input-inline" style="width: 380px">
  73. <input type="hidden" name="sqr" class="layui-input" th:value="${userInfo.userId}">
  74. <input type="text" name="sqrxm" class="layui-input" th:value="${userInfo.name}"
  75. readonly>
  76. </div>
  77. <label class="layui-form-label" style="width: 65px">申请时间</label>
  78. <div class="layui-input-inline" style="width: 370px">
  79. <input type="text" id="sqsj" name="sqsj" class="layui-input">
  80. <tip>日期格式:yyyy-MM-dd</tip>
  81. </div>
  82. </div>
  83. <!-- <div class="layui-form-item layui-inline" style="width: 100%">-->
  84. <!-- <label class="layui-form-label" style="width: 70px">审批状态</label>-->
  85. <!-- <div class="layui-input-inline" style="width: 855px">-->
  86. <!-- <input type="text" id="spzt" name="spzt" class="layui-input" value="未提交" readonly>-->
  87. <!-- </div>-->
  88. <!-- </div>-->
  89. <div class="layui-form-item layui-inline" style="width: 100%">
  90. <label class="layui-form-label" style="width: 70px">可研报告</label>
  91. <div class="layui-input-inline" style="width: 855px">
  92. <input type="text" id="xmmc" name="xmmc" lay-filter="xmmc" class="layui-input" readonly>
  93. </div>
  94. </div>
  95. <div class="layui-form-item layui-inline" style="width: 100%">
  96. <label class="layui-form-label" style="width: 70px">ERP编号</label>
  97. <div class="layui-input-inline" style="width: 380px">
  98. <input type="text" id="erpbh" name="erpbh" class="layui-input" readonly>
  99. </div>
  100. <label class="layui-form-label" style="width: 65px">项目类型</label>
  101. <div class="layui-input-inline" style="width: 370px">
  102. <input type="hidden" id="xmlx" name="xmlx" class="layui-input">
  103. <input type="text" id="xmlxmc" name="xmlxmc" class="layui-input" readonly>
  104. </div>
  105. </div>
  106. <div class="layui-form-item layui-inline" style="width: 100%">
  107. <label class="layui-form-label" style="width: 90px">电科院负责人</label>
  108. <div class="layui-input-inline" style="width: 370px">
  109. <input type="hidden" id="xmfzr" name="xmfzr" class="layui-input">
  110. <input type="text" id="xmfzrxm" name="xmfzrxm" class="layui-input" readonly>
  111. </div>
  112. <label class="layui-form-label" style="width: 65px">所属部门</label>
  113. <div class="layui-input-inline" style="width: 370px">
  114. <input type="hidden" id="ssbm" name="ssbm" class="layui-input">
  115. <input type="text" id="ssbmmc" name="ssbmmc" class="layui-input" readonly>
  116. </div>
  117. </div>
  118. <!-- 右侧悬浮按钮 -->
  119. <div class="right-bottom-btn" style="margin-bottom: 5px">
  120. <button class="layui-btn" lay-filter="viewRwsBtn">
  121. <i class="layui-icon layui-icon-file"></i>查看任务书
  122. </button>
  123. <button type="button" class="layui-btn" lay-submit lay-filter="saveBtnCg">
  124. <i class="layui-icon layui-icon-ok"></i>保存
  125. </button>
  126. <button class="layui-btn" lay-filter="cancleBtn">
  127. <i class="layui-icon layui-icon-close"></i>取消
  128. </button>
  129. </div>
  130. </div>
  131. </form>
  132. </div>
  133. <!--常规结束-->
  134. <!--预算开始-->
  135. <div class="layui-tab-item" style="min-height: 550px; padding-left: 30px; padding-right: 30px">
  136. <form class="layui-form" action="" lay-filter="formDemo">
  137. <div class="layui-form layuimini-form">
  138. <div class="layui-form-item" style="margin-bottom: -10px">
  139. <div class="layui-inline">
  140. <label class="layui-form-label"
  141. style="width: fit-content; margin-bottom: -10px">单位:万元</label>
  142. <label class="layui-form-label" style="width: 170px"></label>
  143. </div>
  144. <div class="layui-inline">
  145. <label class="layui-form-label" style="width: 70px; margin-left: -10px">项目总预算</label>
  146. <div class="layui-input-inline" style="width: 100px">
  147. <input type="text" id="rwsys" name="rwsys" class="layui-input" readonly>
  148. </div>
  149. </div>
  150. <div class="layui-inline">
  151. <label class="layui-form-label" style="width: 60px; margin-left: -15px">年度经费</label>
  152. <div class="layui-input-inline" style="width: 100px">
  153. <input type="text" id="ndczje" name="ndczje" class="layui-input" readonly>
  154. </div>
  155. </div>
  156. <div class="layui-inline">
  157. <label class="layui-form-label" style="width: 70px; margin-left: -15px">年度备用金</label>
  158. <div class="layui-input-inline" style="width: 100px; margin-right: -15px">
  159. <input type="number" id="ndbyj" name="ndbyj" class="layui-input" autocomplete="off">
  160. </div>
  161. </div>
  162. </div>
  163. <table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
  164. <!-- 右侧悬浮按钮 -->
  165. <div class="right-bottom-btn" style="margin-bottom: 5px">
  166. <button class="layui-btn" lay-filter="viewRwsBtn">
  167. <i class="layui-icon layui-icon-file"></i>查看任务书
  168. </button>
  169. <button type="button" class="layui-btn" lay-filter="saveBtnYs">
  170. <i class="layui-icon layui-icon-ok"></i>保存
  171. </button>
  172. <button class="layui-btn" lay-filter="cancleBtn">
  173. <i class="layui-icon layui-icon-close"></i>取消
  174. </button>
  175. </div>
  176. </div>
  177. </form>
  178. </div>
  179. <!--预算结束-->
  180. </div>
  181. </div>
  182. </form>
  183. <script th:src="@{/lib/jquery-3.4.1/jquery-3.4.1.min.js}" charset="utf-8"></script>
  184. <script th:src="@{/lib/layui/layui.js}" charset="utf-8"></script>
  185. <script th:src="@{/lib/coco-message/coco-message.js}" charset="utf-8"></script>
  186. <script th:src="@{/lib/xm-select-v1.2.2/xm-select.js}" charset="utf-8"></script>
  187. <script th:src="@{/js/lay-config.js}" charset="utf-8"></script>
  188. <script type="text/javascript" th:inline="javascript">
  189. //删除键盘的所有默认行为
  190. // document.onkeypress = function(e) {
  191. // e.preventDefault();
  192. // }
  193. //全局禁用enter
  194. document.onkeydown = function (e) {
  195. var ev = (typeof event != 'undefined') ? window.event : e
  196. if (ev.keyCode == 13) {
  197. return false
  198. }
  199. }
  200. AjaxUtil.ctx = /*[[@{/}]]*/'';
  201. layui.use(['form', 'table', 'treeTable', 'layCascader', 'tableSelect', 'laydate'], function () {
  202. var form = layui.form,
  203. layer = layui.layer,
  204. treeTable = layui.treeTable,
  205. laydate = layui.laydate;
  206. var rwsId = -1,
  207. ysId = -1;
  208. var dataBudget = new Array();
  209. var zjfy = 0;
  210. $("#nf").val(new Date().getFullYear());
  211. //申请时间
  212. laydate.render({
  213. elem: '#sqsj',
  214. value: new Date()
  215. });
  216. //任务书
  217. form.on('select(ysrws)', function (data) {
  218. var len = $("#ysrws")[0].length;
  219. while (len > 2)
  220. $("#ysrws")[0].options[--len].remove();
  221. if (data.value == "") {
  222. $("#ysrws").val(0);
  223. $("#rws").val('');
  224. $("#rwsmc").val('');
  225. $("#qs").val('');
  226. $("#wc").val('');
  227. $("#xmzxq").val('');
  228. $("#xmmc").val('');
  229. $("#erpbh").val('');
  230. $("#xmlx").val('');
  231. $("#xmlxmc").val('');
  232. $("#xmfzr").val('');
  233. $("#xmfzrxm").val('');
  234. $("#ssbm").val('');
  235. $("#ssbmmc").val('');
  236. $("#rwsys").val('');
  237. form.render();
  238. }
  239. if (data.value == "-1") {
  240. parent.layer.open({
  241. title: '浏览任务书',
  242. type: 2,
  243. shade: 0.3,
  244. maxmin: true,
  245. area: ['1200px', '750px'],
  246. content: AjaxUtil.ctx + 'prjAnnualbudget/init_project',
  247. end: function (obj) {
  248. rwsId = localStorage.getItem("rws");
  249. var updateflag = localStorage.getItem("updateflag");
  250. if (updateflag == "1") {
  251. var rwsmc = localStorage.getItem("rwsmc");
  252. $("#ysrws").append("<option value=" + rwsId + " selected>" + rwsmc + "</option>");
  253. $("#rws").val(rwsId);
  254. $("#rwsmc").val(rwsmc);
  255. $("#mc").val(localStorage.getItem("rwsmc") + "--" + $("#nf").val() + '年度预算');
  256. $("#qs").val(localStorage.getItem("qs"));
  257. $("#wc").val(localStorage.getItem("wc"));
  258. $("#xmzxq").val(localStorage.getItem("xmzxq"));
  259. $("#xmmc").val(localStorage.getItem("zwmc"));
  260. $("#erpbh").val(localStorage.getItem("erpbh"));
  261. $("#xmlx").val(localStorage.getItem("xmlx"));
  262. $("#xmlxmc").val(localStorage.getItem("xmlxmc"));
  263. $("#xmfzr").val(localStorage.getItem("xmfzr"));
  264. $("#xmfzrxm").val(localStorage.getItem("xmfzrxm"));
  265. $("#ssbm").val(localStorage.getItem("ssbm"));
  266. $("#ssbmmc").val(localStorage.getItem("ssbmmc"));
  267. $("#rwsys").val(localStorage.getItem("ysje"));
  268. } else {
  269. $("#ysrws").val(0);
  270. $("#rws").val('');
  271. $("#rwsmc").val('');
  272. $("#qs").val('');
  273. $("#wc").val('');
  274. $("#xmzxq").val('');
  275. $("#xmmc").val('');
  276. $("#erpbh").val('');
  277. $("#xmlx").val('');
  278. $("#xmlxmc").val('');
  279. $("#xmfzr").val('');
  280. $("#xmfzrxm").val('');
  281. $("#ssbm").val('');
  282. $("#ssbmmc").val('');
  283. $("#rwsys").val('');
  284. }
  285. form.render();
  286. }
  287. });
  288. }
  289. return false;
  290. });
  291. // 监听查看任务书按钮
  292. $("button[lay-filter='viewRwsBtn']").click(function () {
  293. if (rwsId == -1) {
  294. Message.error("请选择申请年度预算的项目,然后再查看任务书", 2000);
  295. } else {
  296. parent.layer.open({
  297. title: '查看项目任务书',
  298. type: 2,
  299. shade: 0.3,
  300. // maxmin: true,
  301. shadeClose: true,
  302. area: ['1100px', '750px'],
  303. content: AjaxUtil.ctx + 'prjProject/forView/' + rwsId,
  304. end: function (index) {
  305. layer.close(index);
  306. }
  307. });
  308. }
  309. return false;
  310. });
  311. // 监听确认按钮
  312. form.on('submit(saveBtnCg)', function (data) {
  313. var nf = $("#nf").val();
  314. var qs = $("#qs").val();
  315. var wc = $("#wc").val();
  316. var xmlxmc = $("#xmlxmc").val();
  317. if (xmlxmc !== '政府类项目') {
  318. if (nf < qs || nf > wc) {
  319. Message.error(nf + "不在项目起止时间内!", 1500);
  320. return false;
  321. }
  322. }
  323. // else {
  324. // if (nf < qs) {
  325. // Message.error(nf + "不在项目起始时间内!", 1500);
  326. // return false;
  327. // }
  328. // }
  329. var url = AjaxUtil.ctx;
  330. if (ysId == -1) {
  331. url += "prjAnnualbudget/doAdd";
  332. } else
  333. url += "prjAnnualbudget/doUpdate";
  334. //基本信息
  335. var index = layer.load(0, {shade: 0.1});
  336. AjaxUtil.post({
  337. url: url,
  338. data: data.field,
  339. success: function (res) {
  340. layer.close(index);
  341. if (res.code === 0) {
  342. Message.success(1500, res.message, function () {
  343. //年度预算ID
  344. if (ysId == -1) {
  345. ysId = res.data.id;
  346. $("#id").val(ysId);
  347. }
  348. parent.setUpdateFlag();
  349. $.ajax({
  350. url: AjaxUtil.ctx + 'prjFeescheme/ndczje/' + rwsId + '?nf=' + $("#nf").val(),
  351. type: "post",
  352. async: false,
  353. dataType: "json",
  354. success: function (result) {
  355. $("#ndczje").val(result);
  356. }
  357. });
  358. //经费预算
  359. $.ajax({
  360. url: AjaxUtil.ctx + 'prjAnnualbudget/list/' + ysId,
  361. type: "post",
  362. async: false,
  363. dataType: "json",
  364. success: function (result) {
  365. dataBudget = result;
  366. for (let i = 0; i < dataBudget.length; i++) {
  367. if (dataBudget[i].fymc.indexOf('总计') > -1) {
  368. zjfy = i;
  369. }
  370. }
  371. dataBudget[zjfy].byj = $("#ndbyj").val();
  372. loadTreetable();
  373. }
  374. });
  375. });
  376. } else {
  377. Message.error(res.message, 1000);
  378. }
  379. },
  380. error: function (error) {
  381. layer.close(index);
  382. }
  383. });
  384. return false;
  385. });
  386. //年度备用金
  387. $("#ndbyj").on("input", function (e) {
  388. //获取input输入的值
  389. var ndbyj = parseFloat(e.delegateTarget.value);
  390. if (isNaN(ndbyj))
  391. ndbyj = 0;
  392. dataBudget[zjfy].byj = ndbyj;
  393. var xmz = 0, byj = 0;
  394. if (dataBudget[zjfy].xmz != null) {
  395. xmz = parseFloat(dataBudget[zjfy].xmz);
  396. if (isNaN(xmz))
  397. xmz = 0;
  398. }
  399. if (dataBudget[zjfy].byj != null) {
  400. byj = parseFloat(dataBudget[zjfy].byj);
  401. if (isNaN(byj))
  402. byj = 0;
  403. }
  404. var ysje = xmz + byj;
  405. if (ysje == 0)
  406. dataBudget[zjfy].ysje = "";
  407. else
  408. dataBudget[zjfy].ysje = ysje;
  409. loadTreetable();
  410. });
  411. //预算
  412. var insTb;
  413. function loadTreetable() {
  414. insTb = treeTable.render({
  415. elem: '#currentTableId',
  416. data: dataBudget,
  417. skin: 'grid',
  418. tree: {
  419. treeColIndex: 1,
  420. treeSpid: "", //最上级的父级id
  421. iconIndex: 1, // 折叠图标显示在第几列
  422. isPidData: true,// 是否是id、pid形式数据
  423. idName: 'bm', // id字段名称
  424. pidName: 'fj', // pid字段名称
  425. arrowType: 'arrow2',
  426. getIcon: 'ew-tree-icon-style2',
  427. openName: 'bm'
  428. },
  429. treeDefaultClose: false,
  430. page: false,
  431. // toolbar: '#toolbarDemo',
  432. cols: [
  433. [
  434. {type: 'numbers', width: '3%'},
  435. {field: 'fymc', width: '30%', title: '费用名称'},
  436. {field: 'xmzys', width: '12%', title: '项目总预算', edit: 'number'},
  437. {field: 'xtjsyzx', width: '15%', title: '系统计算已执行', edit: 'number'},
  438. {field: 'sjyzx', width: '12%', title: '实际已执行', edit: 'number'},
  439. {field: 'ysje', width: '10%', title: '预算金额'},
  440. {field: 'xmz', width: '9%', title: '项目组', edit: 'number'},
  441. {field: "byj", width: '9%', title: '备用金'}
  442. // {field: 'ysqje', width: '11%', title: '已申请金额'},
  443. // {field: 'ybzje', width: '11%', title: '已报账金额'},
  444. // {field: 'byjysq', width: '11%', title: '备用金已申请'},
  445. // {field: 'byjybz', width: '11%', title: '备用金已报账'}
  446. ]
  447. ],
  448. edit: function (obj) {
  449. if (obj.data.edit === false)
  450. return false;
  451. else
  452. return true;
  453. }
  454. });
  455. }
  456. loadTreetable();
  457. // 监听单元格编辑
  458. treeTable.on('edit(currentTableId)', function (obj) {
  459. var value = obj.value,
  460. item = obj.data,
  461. colName = obj.field;
  462. if (item.children == undefined) {
  463. //当前行预算
  464. setCurBudget(item.bm, colName, value);
  465. //父级预算
  466. setFjBudget(item.fj);
  467. }
  468. var xmz = 0, byj = 0;
  469. if (dataBudget[zjfy].xmz != null) {
  470. xmz = parseFloat(dataBudget[zjfy].xmz);
  471. if (isNaN(xmz))
  472. xmz = 0;
  473. }
  474. if (dataBudget[zjfy].byj != null) {
  475. byj = parseFloat(dataBudget[zjfy].byj);
  476. if (isNaN(byj))
  477. byj = 0;
  478. }
  479. var ysje = xmz + byj;
  480. if (ysje == 0)
  481. dataBudget[zjfy].ysje = "";
  482. else
  483. dataBudget[zjfy].ysje = ysje;
  484. loadTreetable();
  485. });
  486. //当前行预算
  487. function setCurBudget(bm, colName, value) {
  488. for (var i = 0; i < dataBudget.length; i++) {
  489. if (bm == dataBudget[i].bm) {
  490. value = parseFloat(value);
  491. if (isNaN(value))
  492. value = null;
  493. // var rwsys = $("#rwsys").val();
  494. // if (value !== null && value > rwsys * 0.2) {
  495. // alert("不能超过项目总预算的20%!");
  496. // return; // 返回,不进行后续处理
  497. // }
  498. //当前数据不能大于总预算列的值
  499. if (dataBudget[i].xmzys != null) {
  500. if (value !== null && value > parseFloat(dataBudget[i].xmzys * 1.2).toFixed(6)) {
  501. alert("输入金额不能超过项目总预算列的120%!");
  502. return; // 返回,不进行后续处理
  503. }
  504. }
  505. //当前单元格
  506. // if(colName == "xmzys") {
  507. // dataBudget[i].xmzys = value;
  508. // } else
  509. if (colName == "xmz") {
  510. dataBudget[i].xmz = value;
  511. } else if (colName == "byj") {
  512. dataBudget[i].byj = value;
  513. } else if (colName == "xtjsyzx") {
  514. dataBudget[i].xtjsyzx = value;
  515. } else if (colName == "sjyzx") {
  516. dataBudget[i].sjyzx = value;
  517. }
  518. //正在编辑的预算
  519. var xmz = 0, byj = 0;
  520. if (dataBudget[i].xmz != null) {
  521. xmz = parseFloat(dataBudget[i].xmz);
  522. if (isNaN(xmz))
  523. xmz = 0;
  524. }
  525. if (dataBudget[i].byj != null) {
  526. byj = parseFloat(dataBudget[i].byj);
  527. if (isNaN(byj))
  528. byj = 0;
  529. }
  530. var ysje = xmz + byj;
  531. if (ysje == 0)
  532. dataBudget[i].ysje = "";
  533. else
  534. dataBudget[i].ysje = ysje;
  535. break;
  536. }
  537. }
  538. }
  539. //父级预算
  540. function setFjBudget(fj) {
  541. if (fj != null && fj != '') {
  542. var xmzys = 0, xmz = 0, byj = 0, xtjsyzx = 0, sjyzx = 0;
  543. //子节点的值相加
  544. for (var j = 0; j < dataBudget.length; j++) {
  545. if (fj == dataBudget[j].fj) {
  546. // var t = parseFloat(dataBudget[j].xmzys);
  547. // if (!isNaN(t))
  548. // xmzys += t;
  549. var t1 = parseFloat(dataBudget[j].xmz);
  550. if (!isNaN(t1))
  551. xmz += t1;
  552. var t2 = parseFloat(dataBudget[j].byj);
  553. if (!isNaN(t2))
  554. byj += t2;
  555. var t3 = parseFloat(dataBudget[j].xtjsyzx);
  556. if (!isNaN(t3))
  557. xtjsyzx += t3;
  558. var t4 = parseFloat(dataBudget[j].sjyzx);
  559. if (!isNaN(t4))
  560. sjyzx += t4;
  561. }
  562. }
  563. //更新父节点的值
  564. for (var j = 0; j < dataBudget.length; j++) {
  565. if (fj == dataBudget[j].bm) {
  566. // if (xmzys == 0)
  567. // dataBudget[j].xmzys = '';
  568. // else
  569. // dataBudget[j].xmzys = xmzys.toFixed(2);
  570. if (xmz == 0)
  571. dataBudget[j].xmz = '';
  572. else
  573. dataBudget[j].xmz = xmz.toFixed(2);
  574. if (xtjsyzx == 0)
  575. dataBudget[j].xtjsyzx = '';
  576. else
  577. dataBudget[j].xtjsyzx = xtjsyzx.toFixed(2);
  578. if (sjyzx == 0)
  579. dataBudget[j].sjyzx = '';
  580. else
  581. dataBudget[j].sjyzx = sjyzx.toFixed(2);
  582. // if (byj == 0)
  583. // dataBudget[j].byj = '';
  584. // else
  585. // dataBudget[j].byj = byj.toFixed(2);
  586. var ysje = xmz + byj;
  587. if (ysje == 0)
  588. dataBudget[j].ysje = "";
  589. else
  590. dataBudget[j].ysje = ysje.toFixed(2);
  591. setFjBudget(dataBudget[j].fj);
  592. break;
  593. }
  594. }
  595. }
  596. }
  597. //组织要保存的数据
  598. function getBudget(budgets, data) {
  599. var budget = {
  600. "id": data.id,
  601. "xmzys": data.xmzys,
  602. "ysje": data.ysje,
  603. "xmz": data.xmz,
  604. "byj": data.byj,
  605. "xtjsyzx": data.xtjsyzx,
  606. "sjyzx": data.sjyzx
  607. };
  608. budgets.push(budget);
  609. if (data.children != undefined) {
  610. getChildNode(budgets, data);
  611. }
  612. }
  613. function getChildNode(budgets, data) {
  614. for (let item of data.children) {
  615. getBudget(budgets, item);
  616. }
  617. }
  618. // 监听确认按钮(项目预算)
  619. $("button[lay-filter='saveBtnYs']").click(function () {
  620. if (ysId == -1) {
  621. Message.error("请先创建年度预算,然后再填写预算明细", 1500);
  622. } else {
  623. var rwsys = $("#rwsys").val();
  624. if (rwsys == "") {
  625. Message.error("任务书预算不能为空,请完善任务书项目预算!", 1500);
  626. return false;
  627. }
  628. var ndzys = dataBudget[0].xmzys;
  629. if (ndzys == null) {
  630. return false;
  631. }
  632. if (parseFloat(ndzys) > parseFloat(rwsys)) {
  633. Message.error("年度总预算不能超过任务书预算!", 1500);
  634. return false;
  635. }
  636. if (parseFloat(ndzys) > parseFloat(rwsys)) {
  637. Message.error("年度总预算不能超过任务书预算!", 1500);
  638. return false;
  639. }
  640. var ndczje = $("#ndczje").val();
  641. var ysje = dataBudget[0].ysje;
  642. // if(ndczje != "" && ysje != null && ndczje != ysje) {
  643. // Message.error("预算金额与年度预算金额不符,请核对!", 1500);
  644. // return false;
  645. // }
  646. var data = insTb.options.data;
  647. var budgets = new Array();
  648. for (var i = 0; i < data.length; i++) {
  649. getBudget(budgets, data[i]);
  650. }
  651. var index = layer.load(0, {shade: 0.1});
  652. AjaxUtil.post({
  653. url: AjaxUtil.ctx + "prjAnnualbudgetdetail/doUpdate",
  654. contentType: "application/json",
  655. data: JSON.stringify(budgets),
  656. success: function (res) {
  657. if (res.code === 0) {
  658. Message.success(1500, res.message, function () {
  659. loadTreetable();
  660. parent.setUpdateFlag();
  661. parent.layer.close(parent.layer.getFrameIndex(window.name));// 关闭子窗口
  662. });
  663. } else {
  664. Message.error(res.message, 1000);
  665. }
  666. layer.close(index);
  667. },
  668. error: function (error) {
  669. layer.close(index);
  670. }
  671. });
  672. }
  673. });
  674. // 监听取消按钮
  675. $("button[lay-filter='cancleBtn']").click(function () {
  676. var iframeIndex = parent.layer.getFrameIndex(window.name);
  677. parent.layer.close(iframeIndex);
  678. });
  679. });
  680. </script>
  681. </body>
  682. </html>