update.html 61 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401
  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. <li>付款计划</li>
  23. </ul>
  24. <div class="layui-tab-content">
  25. <!--常规开始-->
  26. <div class="layui-tab-item layui-show" style="min-height: 550px; margin-bottom: 5px">
  27. <form class="layui-form" action="" lay-filter="formDemo">
  28. <div class="layui-form layuimini-form">
  29. <div class="layui-form-item layui-inline" style="width: 100%">
  30. <label class="layui-form-label required" style="width: 10%">任务书</label>
  31. <div class="layui-input-inline" style="width: 80%">
  32. <input type="hidden" id="rws" name="rws" class="layui-input" th:value="${contract.rws}"
  33. readonly>
  34. <input type="text" id="rwsmc" name="rwsmc" class="layui-input"
  35. th:value="${contract.rwsmc}" readonly>
  36. </div>
  37. </div>
  38. <div class="layui-form-item layui-inline" style="width: 100%">
  39. <label class="layui-form-label required" style="width: 10%">合同名称</label>
  40. <div class="layui-input-inline" style="width: 25%">
  41. <input type="hidden" id="id" name="id" class="layui-input" th:value="${contract.id}" >
  42. <input type="text" id="htmc" name="htmc" lay-verify="required" lay-reqtext="合同名称不能为空" autocomplete="off" class="layui-input" th:value="${contract.htmc}">
  43. </div>
  44. <label class="layui-form-label required" style="width: 15%">合同金额(万元)</label>
  45. <div class="layui-input-inline" style="width: 35%">
  46. <input type="number" id="htje" name="htje" class="layui-input" lay-verify="required" lay-reqtext="合同金额不能为空"
  47. th:value="${contract.htje}"
  48. autocomplete="off">
  49. </div>
  50. </div>
  51. <div class="layui-form-item layui-inline" style="width: 100%">
  52. <label class="layui-form-label required" style="width: 10%">招标批次</label>
  53. <div class="layui-input-inline" style="width: 25%">
  54. <input type="text" id="zbpc" name="zbpc" autocomplete="off" class="layui-input" lay-verify="required" lay-reqtext="招标批次不能为空" th:value="${contract.zbpc}">
  55. </div>
  56. <label class="layui-form-label" style="width: 15%">中选单位</label>
  57. <div class="layui-input-inline" style="width: 35%">
  58. <input type="text" id="zxdw" name="zxdw" class="layui-input" autocomplete="off" th:value="${contract.zxdw}" >
  59. </div>
  60. </div>
  61. <div class="layui-form-item layui-inline" style="width: 100%">
  62. <label class="layui-form-label required" style="width: 10%">执行周期</label>
  63. <div class="layui-input-inline" style="width: 25%">
  64. <input type="text" name="kssj" id="kssj" placeholder="开始时间" class="layui-input" lay-verify="required" lay-reqtext="开始时间不能为空"
  65. th:value="${contract.kssj}"
  66. readonly>
  67. </div>
  68. <div class="layui-form-mid">-</div>
  69. <div class="layui-input-inline" style="width: 25%">
  70. <input type="text" name="jssj" id="jssj" placeholder="终止时间" class="layui-input" lay-verify="required" lay-reqtext="结束不能为空"
  71. th:value="${contract.jssj}"
  72. readonly>
  73. </div>
  74. </div>
  75. <div class="layui-form-item layui-inline" style="width: 100%">
  76. <label class="layui-form-label required" style="width: 10%">是否验收</label>
  77. <div class="layui-input-inline" style="width: 10%">
  78. <input type="checkbox" name="sfys" id="sfys" title="ON|OFF" lay-skin="switch" lay-filter="sfys" checked>
  79. </div>
  80. <div id="sfysdiv">
  81. <label class="layui-form-label required" style="width: 10%">验收时间</label>
  82. <div class="layui-input-inline" style="width: 25%">
  83. <input type="text" id="yssj" name="yssj" autocomplete="off" class="layui-input" placeholder="请选择验收时间...">
  84. </div>
  85. </div>
  86. <label class="layui-form-label required" style="width: 15%">是否是系统内单位</label>
  87. <div class="layui-input-inline" style="width: 10%">
  88. <input type="checkbox" name="sfsxtndw" id="sfsxtndw" title="ON|OFF" lay-skin="switch" lay-filter="sfsxtndw" checked>
  89. </div>
  90. </div>
  91. <div class="layui-form-item layui-inline" style="width: 100%">
  92. <label class="layui-form-label" style="width: 60px">合同文件</label>
  93. <div class="layuimini-container"
  94. style="margin-left: 90px; margin-right: 20px; padding-bottom: 10px">
  95. <input type="hidden" id="wj" name="wj" class="layui-input" th:value="${contract.wj}">
  96. <div class="layui-btn-group" style="margin-bottom: -8px">
  97. <button type="button" class="layui-btn layui-btn-primary layui-btn-sm upload"
  98. id="upLoad1" lay-data="{fileType:'htwj'}"><i class="layui-icon"></i>上传
  99. </button>
  100. <button type="button" class="layui-btn layui-btn-primary layui-btn-sm"
  101. lay-filter="deleteFile1"><i class="layui-icon"></i>删除
  102. </button>
  103. </div>
  104. <table class="layui-hide" id="currentTableId1" name="currentTableId1"
  105. lay-filter="currentTableFilter1"
  106. style="padding-top: 0px;margin-top: 0px"></table>
  107. <label>上传招标合同、中标通知书、合同流转单(上传文件形式:word.pdf.excel)。</label>
  108. </div>
  109. </div>
  110. <div class="layui-form-item layui-inline" style="width: 100%">
  111. <label class="layui-form-label" style="width: 60px">验收资料</label>
  112. <div class="layuimini-container"
  113. style="margin-left: 90px; margin-right: 20px; padding-bottom: 10px">
  114. <input type="hidden" id="yszl" name="yszl" class="layui-input"
  115. th:value="${contract.yszl}">
  116. <div class="layui-btn-group" style="margin-bottom: -8px">
  117. <button type="button" class="layui-btn layui-btn-primary layui-btn-sm upload"
  118. id="upLoad2" lay-data="{fileType:'yszl'}"><i class="layui-icon"></i>上传
  119. </button>
  120. <button type="button" class="layui-btn layui-btn-primary layui-btn-sm"
  121. lay-filter="deleteFile2"><i class="layui-icon"></i>删除
  122. </button>
  123. </div>
  124. <table class="layui-hide" id="currentTableId2" name="currentTableId2"
  125. lay-filter="currentTableFilter2"
  126. style="padding-top: 0px;margin-top: 0px"></table>
  127. <label>需上传合同约定的技术报告、测试报告、第三方检测报告、图纸、文宣专利等乙方应提供成果;外委验收意见(包括完成情况表及专家签名)。</label>
  128. </div>
  129. </div>
  130. <!-- 右侧悬浮按钮 -->
  131. <div class="right-bottom-btn">
  132. <button type="button" class="layui-btn" lay-submit lay-filter="saveBtn">
  133. <i class="layui-icon layui-icon-ok"></i>保存
  134. </button>
  135. <button type="button" class="layui-btn" lay-filter="cancleBtn">
  136. <i class="layui-icon layui-icon-close"></i>取消
  137. </button>
  138. </div>
  139. </div>
  140. </form>
  141. </div>
  142. <!--常规结束-->
  143. <!--报账计划开始-->
  144. <div class="layui-tab-item" style="min-height: 550px; padding-left: 30px; padding-right: 30px">
  145. <form class="layui-form" action="" lay-filter="formDemo">
  146. <div class="layui-form layuimini-form">
  147. <div class="layui-btn-group" style="margin-bottom: 0.5%">
  148. <button type="button" class="layui-btn layui-btn-primary layui-btn-sm"
  149. lay-filter="btnAdd3"><i class="layui-icon"></i>新建
  150. </button>
  151. <button type="button" class="layui-btn layui-btn-primary layui-btn-sm"
  152. lay-filter="btnEdit3"><i class="layui-icon"></i>编辑
  153. </button>
  154. <button type="button" class="layui-btn layui-btn-primary layui-btn-sm"
  155. lay-filter="btnView3"><i class="layui-icon">&#xe63c;</i>查看
  156. </button>
  157. <button type="button" class="layui-btn layui-btn-primary layui-btn-sm"
  158. lay-filter="btnDelete3"><i class="layui-icon"></i>删除
  159. </button>
  160. </div>
  161. <table class="layui-hide" id="currentTableId" name="currentTableId"
  162. lay-filter="currentTableFilter"></table>
  163. <div class="layui-form-item layui-inline" style="width: 100%">
  164. <div class="layui-input-block" style="margin-left: 1%; width: 85%;">
  165. </p>
  166. </div>
  167. </div>
  168. <!-- 右侧悬浮按钮 -->
  169. <div class="right-bottom-btn" style="margin-bottom: 5px">
  170. <button type="button" class="layui-btn" lay-submit lay-filter="saveBtn3">
  171. <i class="layui-icon layui-icon-ok"></i>保存
  172. </button>
  173. <button class="layui-btn" lay-filter="cancleBtn">
  174. <i class="layui-icon layui-icon-close"></i>取消
  175. </button>
  176. </div>
  177. </div>
  178. </form>
  179. </div>
  180. <!--报账计划结束-->
  181. <!--付款计划开始-->
  182. <div class="layui-tab-item" style="min-height: 550px; padding-left: 30px; padding-right: 30px">
  183. <form class="layui-form" action="" lay-filter="formDemo">
  184. <div class="layui-form layuimini-form">
  185. <div class="layui-btn-group" style="margin-bottom: 0.5%">
  186. <button type="button" class="layui-btn layui-btn-primary layui-btn-sm"
  187. lay-filter="btnAdd2"><i class="layui-icon"></i>新建
  188. </button>
  189. <button type="button" class="layui-btn layui-btn-primary layui-btn-sm"
  190. lay-filter="btnEdit2"><i class="layui-icon"></i>编辑
  191. </button>
  192. <button type="button" class="layui-btn layui-btn-primary layui-btn-sm"
  193. lay-filter="btnView2"><i class="layui-icon">&#xe63c;</i>查看
  194. </button>
  195. <button type="button" class="layui-btn layui-btn-primary layui-btn-sm"
  196. lay-filter="btnDelete2"><i class="layui-icon"></i>删除
  197. </button>
  198. </div>
  199. <table class="layui-hide" id="currentTableId3" name="currentTableId3"
  200. lay-filter="currentTableFilter3"></table>
  201. <div class="layui-form-item layui-inline" style="width: 100%">
  202. <div class="layui-input-block" style="margin-left: 1%; width: 85%;">
  203. <p style="color: red;">注:现要求付款计划必须一次性填写完成,并且付款计划总金额等于合同金额!!
  204. </p>
  205. </div>
  206. </div>
  207. <!-- 右侧悬浮按钮 -->
  208. <div class="right-bottom-btn" style="margin-bottom: 5px">
  209. <button type="button" class="layui-btn" lay-submit lay-filter="saveBtn2">
  210. <i class="layui-icon layui-icon-ok"></i>保存
  211. </button>
  212. <button class="layui-btn" lay-filter="cancleBtn">
  213. <i class="layui-icon layui-icon-close"></i>关闭
  214. </button>
  215. </div>
  216. </div>
  217. </form>
  218. </div>
  219. <!--付款计划结束-->
  220. </div>
  221. </div>
  222. </form>
  223. <script>
  224. const sfys = [[${contract.sfys}]];
  225. const sfsxtnbdw = [[${contract.sfsxtndw}]];
  226. var sf = document.getElementById('sfys');
  227. var nbdw = document.getElementById('sfsxtndw');
  228. if (sfys == 1){
  229. sf.checked = true;
  230. sf.value = 1;
  231. document.getElementById('sfysdiv').style.display = 'block';
  232. }else {
  233. sf.checked = false;
  234. sf.value = 0;
  235. document.getElementById('sfysdiv').style.display = 'none';
  236. }
  237. if (sfsxtnbdw == 1){
  238. nbdw.checked = true;
  239. nbdw.value = 1;
  240. }else {
  241. nbdw.checked = false;
  242. nbdw.value = 0;
  243. }
  244. </script>
  245. <script th:src="@{/lib/jquery-3.4.1/jquery-3.4.1.min.js}" charset="utf-8"></script>
  246. <script th:src="@{/lib/layui/layui.js}" charset="utf-8"></script>
  247. <script th:src="@{/lib/coco-message/coco-message.js}" charset="utf-8"></script>
  248. <script th:src="@{/lib/xm-select-v1.2.2/xm-select.js}" charset="utf-8"></script>
  249. <script th:src="@{/js/lay-config.js}" charset="utf-8"></script>
  250. <script type="text/javascript" th:inline="javascript">
  251. AjaxUtil.ctx = /*[[@{/}]]*/'';
  252. var updateflag = 0;//更新标志
  253. var htInfo = {};
  254. var bzjh = [];
  255. var fkjh = [];
  256. layui.use(['form', 'table', 'treeTable', 'layCascader', 'upload','laydate'], function () {
  257. var form = layui.form,
  258. table = layui.table,
  259. layer = layui.layer,
  260. upload = layui.upload,
  261. laydate = layui.laydate;
  262. var htId = $("#id").val();
  263. var rwsId = $("#rws").val();
  264. var xmApproval = parent.getXmApproval();
  265. var spzt =xmApproval.spzt;
  266. var userPostName = [[${userPostName}]]
  267. var rwsqssj = [[${rwsqssj}]]
  268. var rwswcsj = [[${rwswcsj}]]
  269. var sfysid = [[${contract.sfys}]]
  270. var sfsxtndwid = [[${contract.sfsxtndw}]]
  271. console.log(spzt)
  272. //申请时间
  273. laydate.render({
  274. elem: '#kssj',
  275. done: function (value, date, endDate) {
  276. sqsj1 = $("#kssj").val();
  277. sqsj2 = $("#jssj").val();
  278. if (rwsqssj ==''||rwswcsj==''){
  279. layer.msg('请先选择任务书!',{icon:8});
  280. $("#kssj").val("");
  281. return;
  282. }
  283. if (sqsj1<rwsqssj){
  284. layer.msg("合同开始时间不能早于任务书开始时间,应该在任务书项目周期内!",{icon:2})
  285. $("#kssj").val("");
  286. return;
  287. }
  288. if (sqsj2 !=''&&sqsj1 == sqsj2){
  289. layer.msg('执行周期开始时间与结束时间不能为同一天!',{icon:2});
  290. $("#kssj").val("");
  291. return;
  292. }
  293. if (yssj != ''){
  294. if (sqsj1 > yssj){
  295. layer.msg('验收时间不能早于或等于合同开始时间!',{icon:2});
  296. $("#kssj").val("");
  297. return;
  298. }
  299. }
  300. if (sqsj1 != "" && sqsj2 != "") {
  301. if (sqsj1 > sqsj2) {
  302. Message.warning("起始时间不能晚于终止时间!", 1500);
  303. $("#kssj").val("");
  304. return;
  305. }
  306. }
  307. }
  308. });
  309. laydate.render({
  310. elem: '#jssj',
  311. done: function (value, date, endDate) {
  312. sqsj1 = $("#kssj").val();
  313. sqsj2 = $("#jssj").val();
  314. const currentDate = new Date();
  315. const sqsj3 = new Date(sqsj2);
  316. if (rwsqssj ==''||rwswcsj==''){
  317. layer.msg('请先选择任务书!',{icon:8});
  318. $("#jssj").val("");
  319. return;
  320. }
  321. if (sqsj2>rwswcsj){
  322. layer.msg("合同结束时间不能晚于任务书结束时间,应该在任务书项目周期内!",{icon:2})
  323. $("#jssj").val("");
  324. return;
  325. }
  326. if (sqsj1!=''&&sqsj1 == sqsj2){
  327. layer.msg('执行周期开始时间与结束时间不能为同一天!',{icon:2});
  328. $("#jssj").val("");
  329. return;
  330. }
  331. if (sqsj1 != "" && sqsj2 != "") {
  332. if (sqsj1 > sqsj2) {
  333. Message.warning("终止时间不能早于开始时间!", 1500);
  334. $("#jssj").val("");
  335. return;
  336. }
  337. }
  338. }
  339. });
  340. laydate.render({
  341. elem: '#yssj',
  342. done: function (value, date, endDate) {
  343. sqsj1 = $("#kssj").val();
  344. sqsj2 = $("#jssj").val();
  345. yssj = $("#yssj").val();
  346. if (sqsj1 != '' && yssj != ''){
  347. if (yssj <= sqsj1){
  348. layer.msg('验收时间不能早于或等于合同开始时间!',{icon:2});
  349. $("#yssj").val("");
  350. }
  351. }else {
  352. layer.msg('请先填写执行周期!',{icon:8});
  353. $("#yssj").val("");
  354. }
  355. }
  356. });
  357. laydate.render({
  358. elem: '#yqrq',
  359. done: function (value, date, endDate) {
  360. sqsj1 = $("#kssj").val();
  361. sqsj2 = $("#jssj").val();
  362. yssj = $("#yssj").val();
  363. yqrq = $("#yqrq").val();
  364. // 大于项目执行周期 不能等于
  365. if (sqsj1 == '' && yssj == ''){
  366. layer.msg('请先录入执行周期!',{icon:2});
  367. $("#yqrq").val("");
  368. }
  369. if (yqrq <= sqsj2 ){
  370. layer.msg('延期时间不能小于或等于合同执行结束时间!',{icon:2});
  371. $("#yqrq").val("");
  372. }
  373. if (yqrq <= sqsj1){
  374. layer.msg('延期时间不能小于或等于合同执行开始时间',{icon:2});
  375. $("#yqrq").val("");
  376. }
  377. }
  378. });
  379. var verify = {
  380. required:function (value) {
  381. if (value === ''){
  382. return '项目已验收,验收时间不能为空!';
  383. }
  384. }
  385. };
  386. // 监听是否验收
  387. form.on('switch(sfys)',function (data) {
  388. if (data.elem.checked) {
  389. $('#sfysdiv').css('display','block');
  390. $('#sfys').val(1);
  391. form.verify(verify);
  392. console.log('复选框已选中');
  393. return;
  394. } else {
  395. console.log('复选框已取消选中');
  396. $('#sfysdiv').css('display','none');
  397. $('#sfys').val(0);
  398. form.verify({});
  399. return;
  400. }
  401. });
  402. // 监听是否是内部单位
  403. form.on('switch(sfsxtndw)', function (data) {
  404. console.log('进来了');
  405. if (data.elem.checked) {
  406. $('#sfsxtndw').val(1);
  407. console.log('复选框已选中');
  408. return;
  409. } else {
  410. console.log('复选框已取消选中');
  411. $('#sfsxtndw').val(0);
  412. return;
  413. }
  414. });
  415. // 用于存放表格数据
  416. var dataHtwj = new Array();
  417. if ([[${contract.wj}]] != null && [[${contract.wj}]] != "") {
  418. dataHtwj = eval('(' + [[${contract.wj}]] + ')');
  419. }
  420. //合同文件
  421. var currTable1 = table.render({
  422. elem: '#currentTableId1',
  423. data: dataHtwj,
  424. cols: [
  425. [
  426. {type: "radio", fixed: 'left'},
  427. {field: 'wjm', title: '文件名', width: '40%'},
  428. {field: 'scrq', title: '上传日期', width: '15%', align: 'center'},
  429. {field: 'sm', title: '说明', edit: 'text'}
  430. ]
  431. ],
  432. autoSort: false,
  433. limit: Number.MAX_VALUE,
  434. page: false,
  435. skin: 'grid',
  436. done: function (res, curr, count) { // done为数据渲染完的回调
  437. }
  438. });
  439. //文件上传
  440. upload.render({
  441. elem: '#upLoad1' //绑定元素
  442. , url: AjaxUtil.ctx + 'fileupload/upload'
  443. , methd: 'post'
  444. , accept: 'file'
  445. , data: {}
  446. , done: function (res) {
  447. if (0 === res.code) {
  448. var curData = {
  449. "wjm": res.data.fileName,
  450. "scrq": res.data.fileDate,
  451. "Url": res.data.fileUrl,
  452. "sm": res.data.sm
  453. };
  454. dataHtwj.push(curData);
  455. currTable1.reload();
  456. } else
  457. layer.alert("上传文件出现错误!");
  458. }
  459. , error: function () {
  460. layer.alert("上传文件出现错误!");
  461. }
  462. , before: function (res) {
  463. let fileType = this.fileType;
  464. this.data.fileType = fileType;
  465. }
  466. });
  467. $("button[lay-filter='deleteFile1']").click(function () {
  468. if (dataHtwj.length == 0)
  469. return;
  470. var checkStatus = table.checkStatus('currentTableId1')
  471. , data = checkStatus.data;
  472. if (data == null || data.length === 0) {
  473. Message.warning("请选择要删除的文件!", 1000);
  474. return;
  475. }
  476. for (var i = 0; i < dataHtwj.length; i++) {
  477. var item = dataHtwj[i];
  478. if (item.LAY_CHECKED) {//条件:选中
  479. dataHtwj.splice(i, 1);//移除后后造成数组下标索引发生变化,所以下面需要i--
  480. i--;
  481. }
  482. }
  483. //刷新表格
  484. currTable1.reload();
  485. });
  486. //双击(合同文件)
  487. table.on('rowDouble(currentTableFilter1)', function (obj) {
  488. window.open(obj.data.Url);
  489. });
  490. // 用于存放表格数据
  491. var dataYszl = new Array();
  492. if ([[${contract.yszl}]] != null && [[${contract.yszl}]] != "") {
  493. dataYszl = eval('(' + [[${contract.yszl}]] + ')');
  494. }
  495. //验收资料
  496. var currTable2 = table.render({
  497. elem: '#currentTableId2',
  498. data: dataYszl,
  499. cols: [
  500. [
  501. {type: "checkbox", align: 'center'},
  502. {type: 'numbers', align: 'center'},
  503. {field: 'wjm', title: '文件名', width: '30%'},
  504. {field: 'scrq', title: '上传日期', width: '15%', align: 'center'},
  505. {field: 'sm', title: '说明', edit: 'text'}
  506. ]
  507. ],
  508. autoSort: false,
  509. limits: [10, 15, 20, 25, 50, 100],
  510. limit: Number.MAX_VALUE,
  511. page: false,
  512. skin: 'grid',
  513. done: function (res, curr, count) { // done为数据渲染完的回调
  514. }
  515. });
  516. //文件上传
  517. upload.render({
  518. elem: '#upLoad2' //绑定元素
  519. , url: AjaxUtil.ctx + 'fileupload/upload'
  520. , methd: 'post'
  521. , accept: 'file'
  522. , data: {}
  523. , done: function (res) {
  524. if (0 === res.code) {
  525. var curData = {
  526. "wjm": res.data.fileName,
  527. "scrq": res.data.fileDate,
  528. "Url": res.data.fileUrl,
  529. "sm": res.data.sm
  530. };
  531. dataYszl.push(curData);
  532. currTable2.reload();
  533. } else
  534. layer.alert("上传文件出现错误!");
  535. }
  536. , error: function () {
  537. layer.alert("上传文件出现错误!");
  538. }
  539. , before: function (res) {
  540. let fileType = this.fileType;
  541. this.data.fileType = fileType;
  542. }
  543. });
  544. $("button[lay-filter='deleteFile2']").click(function () {
  545. if (dataYszl.length == 0)
  546. return;
  547. var checkStatus = table.checkStatus('currentTableId2')
  548. , data = checkStatus.data;
  549. if (data == null || data.length === 0) {
  550. Message.warning("请选择要删除的文件!", 1000);
  551. return;
  552. }
  553. for (var i = 0; i < dataYszl.length; i++) {
  554. var item = dataYszl[i];
  555. if (item.LAY_CHECKED) {//条件:选中
  556. dataYszl.splice(i, 1);//移除后后造成数组下标索引发生变化,所以下面需要i--
  557. i--;
  558. }
  559. }
  560. //刷新表格
  561. currTable2.reload();
  562. });
  563. //双击(验收资料)
  564. table.on('rowDouble(currentTableFilter2)', function (obj) {
  565. window.open(obj.data.Url);
  566. });
  567. // 监听确认按钮(常规)
  568. form.on('submit(saveBtn)', function (data) {
  569. var sfys = document.getElementById('sfys');
  570. var yssj = document.getElementById('yssj').value;
  571. var sfsxtndw = document.getElementById('sfsxtndw');
  572. var bzjh = table.cache["currentTableId"];
  573. var fkjh = table.cache["currentTableId3"];
  574. if (bzjh.length === 0) {
  575. Message.warning("请创建报账计划!!!", 1500);
  576. return;
  577. }else {
  578. var count = 0;
  579. let sum = 0;
  580. const htje =parseFloat($("#htje").val()).toFixed(8);
  581. for (let i = 0; i < bzjh.length; i++) {
  582. let zfje = parseFloat(bzjh[i].bzje) || 0;
  583. let scaledValue = (zfje * 100000).toFixed(8);
  584. sum += parseFloat(scaledValue);
  585. }
  586. console.log('sum1:' + sum)
  587. console.log('htje:' + htje)
  588. count = sum / 100000;
  589. if (count > htje) {
  590. Message.warning("报账计划付款总金额大于合同金额!!!", 1500);
  591. return false;
  592. } else if (count < htje) {
  593. Message.warning("报账计划付款总金额小于合同金额!", 1500);
  594. return false;
  595. }
  596. }
  597. if (fkjh.length === 0) {
  598. Message.warning("请创建付款计划!!!", 1500)
  599. return;
  600. }else {
  601. var count = 0;
  602. let sum = 0;
  603. const htje =parseFloat($("#htje").val()).toFixed(8);
  604. for (let i = 0; i < fkjh.length; i++) {
  605. let zfje = parseFloat(fkjh[i].zfje) || 0;
  606. let scaledValue = (zfje * 100000).toFixed(8);
  607. sum += parseFloat(scaledValue);
  608. }
  609. console.log('sum2:' + sum)
  610. count = sum / 100000;
  611. if (count>htje){
  612. Message.warning("付款计划付款总金额大于合同金额!!!", 1500);
  613. return false;
  614. }else if (count<htje){
  615. Message.warning("付款计划付款总金额小于合同金额!!!", 1500);
  616. return false;
  617. }
  618. }
  619. if (sfys == 1 || sfys == 'on'){
  620. if (yssj == ''){
  621. layer.msg('项目已验收,验收时间不能为空!',{icon:2});
  622. return ;
  623. }
  624. data.field.sfys = 1;
  625. }else {
  626. if (yssj === '') {
  627. delete data.field.yssj;
  628. }
  629. }
  630. if(sfsxtndw != 0 && sfsxtndw != 1){
  631. if (sfsxtndwid != null && sfsxtndwid != ''){
  632. data.field.sfsxtndw = sfsxtndwid;
  633. }else {
  634. data.field.sfsxtndw = 0;
  635. }
  636. }
  637. if (spzt !=='未锁定'&&userPostName !='科技项目管理专责'&&userPostName !='科技项目管理专责2'){
  638. Message.warning("该合同状态为锁定中,只能修改付款计划,不可修改常规信息!", 2000);
  639. return false;
  640. }
  641. //合同文件
  642. var dataWB_Htwj = [];
  643. for (const item of dataHtwj) {
  644. var dfWb = {
  645. "id": item.id,
  646. "wjm": item.wjm,
  647. "Url": item.Url,
  648. "scrq": item.scrq,
  649. "sm": item.sm
  650. };
  651. dataWB_Htwj.push(dfWb);
  652. }
  653. $("#wj").val(JSON.stringify(dataWB_Htwj));
  654. data.field.wj = JSON.stringify(dataWB_Htwj);
  655. //验收资料
  656. var dataWB_Yszl = [];
  657. for (const item of dataYszl) {
  658. var dfWb = {
  659. "id": item.id,
  660. "wjm": item.wjm,
  661. "Url": item.Url,
  662. "scrq": item.scrq,
  663. "sm": item.sm
  664. };
  665. dataWB_Yszl.push(dfWb);
  666. }
  667. $("#yszl").val(JSON.stringify(dataWB_Yszl));
  668. data.field.yszl = JSON.stringify(dataWB_Yszl);
  669. var url = AjaxUtil.ctx + "prjContract/doUpdate";
  670. if (htId == -1)
  671. url = AjaxUtil.ctx + "prjContract/doAdd";
  672. var index = layer.load(0, {shade: 0.1});
  673. AjaxUtil.post({
  674. url: url,
  675. data: data.field,
  676. success: function (res) {
  677. if (res.code === 0) {
  678. if (htId == -1) {
  679. htId = res.data.id;
  680. $("#id").val(htId);
  681. }
  682. parent.setUpdateFlag();
  683. Message.success(res.message, 1000);
  684. } else {
  685. Message.error(res.message, 1000);
  686. }
  687. if(htId != -1){
  688. var subTopics = table.cache["currentTableId"];
  689. // 获取合同金额,并保留 小数点后八位
  690. const htje =parseFloat($("#htje").val()).toFixed(8);
  691. var prjReimbursementplanList =[];
  692. for (const item of subTopics) {
  693. var prjReimbursementplan = {
  694. "id":item.id,
  695. "nf": item.nf,
  696. "ht": htId,
  697. "jhmc": item.jhmc,
  698. "rws": item.rws,
  699. "bzbl": item.bzbl,
  700. "bzje": item.bzje,
  701. };
  702. prjReimbursementplanList.push(prjReimbursementplan);
  703. }
  704. AjaxUtil.post({
  705. url: AjaxUtil.ctx + "prjReimbursementplan/doAdd/?htje="+htje,
  706. contentType: "application/json",
  707. data: JSON.stringify(prjReimbursementplanList),
  708. success: function (res) {
  709. if (res.code == 0){
  710. layer.msg(res.message,{icon:1},function () {
  711. });
  712. }else if (res.code == -1){
  713. layer.msg(res.message,{icon:2},function () {
  714. return;
  715. })
  716. }
  717. },
  718. error: function (error) {
  719. Message.error(error.message, 1000);
  720. }
  721. });
  722. }
  723. if (htId != -1){
  724. var subTopics = table.cache["currentTableId3"];
  725. // 获取合同金额,并保留 小数点后八位
  726. const htje =parseFloat($("#htje").val()).toFixed(8);
  727. var prjPayplanList =[];
  728. for (const item of subTopics) {
  729. var prjPayplan = {
  730. "id":item.id,
  731. "fkxx": item.fkxx,
  732. "fkyq": item.fkyq,
  733. "ht": htId,
  734. "jhmc": item.jhmc,
  735. "rws": item.rws,
  736. "zfbl": item.zfbl,
  737. "zfje": item.zfje,
  738. };
  739. prjPayplanList.push(prjPayplan);
  740. }
  741. var index = layer.load(0, {shade: 0.1});
  742. AjaxUtil.post({
  743. url: AjaxUtil.ctx + "prjPayplan/doAdd1/?htje="+htje,
  744. contentType: "application/json",
  745. data: JSON.stringify(prjPayplanList),
  746. success: function (res) {
  747. if (res.code ==0){
  748. layer.msg(res.message,{icon:1},function () {
  749. layer.msg(res.message);
  750. var iframeIndex = parent.layer.getFrameIndex(window.name);
  751. parent.layer.close(iframeIndex);
  752. });
  753. }else if (res.code == -1){
  754. layer.msg(res.message,{icon:2},function () {
  755. return;
  756. })
  757. }
  758. },
  759. error: function (error) {
  760. Message.error(error.message, 1000);
  761. }
  762. });
  763. }
  764. layer.close(index);
  765. },
  766. error: function (error) {
  767. Message.error(error.message, 1000)
  768. }
  769. });
  770. layer.close(index);
  771. return false;
  772. });
  773. var dataBzjh = [[${dataBzjh}]]
  774. var currTable3 = table.render({
  775. elem: '#currentTableId',
  776. data: dataBzjh,
  777. cols: [
  778. [
  779. {type: "checkbox"},
  780. {type: 'numbers', align: 'center',title: '序号'},
  781. {field: 'jhmc', title: '计划名称', width: '15%'},
  782. {field: 'nf', title: '年份', width: '20%'},
  783. {field: 'bzbl', title: '报账比例(%)', width: '14%'},
  784. {field: 'bzje', title: '报账金额(万元)', width: '16%'},
  785. {field: 'cjsj', title: '创建时间', align: 'center'}
  786. ]
  787. ],
  788. parseData: function (res) { //res 即为原始返回的数据
  789. return {
  790. "code": res.code, //解析接口状态
  791. "msg": res.message, //解析提示文本
  792. "count": res.data.total, //解析数据长度
  793. "data": res.data.rows //解析数据列表
  794. };
  795. }
  796. });
  797. //新建报账计划
  798. $("button[lay-filter='btnAdd3']").click(function () {
  799. if (htId == -1) {
  800. Message.error("请先创建并保存合同,然后创建报账计划", 2000);
  801. } else {
  802. var startYear = new Date(rwsqssj).getFullYear();
  803. var endYear = new Date(rwswcsj).getFullYear();
  804. var years = [];
  805. for (var year = startYear; year <= endYear; year++) {
  806. years.push(year);
  807. }
  808. nf = years
  809. htInfo = {
  810. "rws": rwsId,
  811. "ht": htId,
  812. "htje": $("#htje").val()
  813. }
  814. layer.open({
  815. title: '新建报账计划',
  816. type: 2,
  817. maxmin: true,
  818. shade: 0.2,
  819. area: [layerwidth + 'px', layerheight + 'px'],
  820. content: AjaxUtil.ctx + 'prjReimbursementplan/forAdd',
  821. end: function (index) {
  822. // 重载表格
  823. if (updateflag == 1)
  824. var oldData = table.cache["currentTableId"];
  825. console.log(oldData)
  826. oldData.push(bzjh);
  827. if (oldData != '' && oldData !=null) {
  828. table.reload('currentTableId', {
  829. data: oldData,
  830. })
  831. }
  832. updateflag = 0;
  833. }
  834. });
  835. }
  836. return false;
  837. });
  838. //编辑报账计划
  839. $("button[lay-filter='btnEdit3']").click(function () {
  840. var subTopics = table.cache["currentTableId"];
  841. if (subTopics && subTopics.length === 0) {
  842. return;
  843. }
  844. var checkStatus = table.checkStatus('currentTableId')
  845. , data = checkStatus.data;
  846. if (data == null || data.length === 0) {
  847. Message.warning("请选择要编辑的报账计划!", 1500);
  848. } else if (data.length > 1) {
  849. Message.warning("请选择一条记录进行编辑!", 1500);
  850. } else {
  851. var startYear = new Date(rwsqssj).getFullYear();
  852. var endYear = new Date(rwswcsj).getFullYear();
  853. var years = [];
  854. for (var year = startYear; year <= endYear; year++) {
  855. years.push(year);
  856. }
  857. nf = years
  858. htInfo = {
  859. "htje": $("#htje").val()
  860. }
  861. bzjh = {
  862. 'id':data[0].id,
  863. 'fysq':data[0].fysq,
  864. 'rws':data[0].rws,
  865. 'ht':data[0].ht,
  866. 'cjr':data[0].cjr,
  867. 'jhmc':data[0].jhmc,
  868. 'bzbl':data[0].bzbl,
  869. 'bzje':data[0].bzje,
  870. 'nf':data[0].nf,
  871. 'cjsj':data[0].cjsj,
  872. }
  873. layer.open({
  874. title: '编辑报账计划',
  875. type: 2,
  876. maxmin: true,
  877. shade: 0.2,
  878. area: [layerwidth + 'px', layerheight + 'px'],
  879. content: AjaxUtil.ctx + 'prjReimbursementplan/forUpdate',
  880. end: function (index) {
  881. // 重载表格
  882. if (updateflag == 1)
  883. for (var i = 0; i < subTopics.length; i++) {
  884. var item = subTopics[i];
  885. if (item.LAY_CHECKED) {//选中
  886. subTopics[i] = bzjh;
  887. break;
  888. }
  889. }
  890. //刷新表格
  891. var currData = subTopics;
  892. table.reload('currentTableId', {
  893. data: currData
  894. });
  895. updateflag = 0;
  896. }
  897. });
  898. }
  899. });
  900. // 监听查看按钮(报账计划)
  901. $("button[lay-filter='btnView3']").click(function () {
  902. var subTopics = table.cache["currentTableId"];
  903. if (subTopics.length == 0)
  904. return;
  905. var checkStatus = table.checkStatus('currentTableId')
  906. , data = checkStatus.data;
  907. if (data == null || data.length === 0) {
  908. Message.warning("请选择要浏览的报账计划!", 1500);
  909. } else if (data.length > 1) {
  910. Message.warning("请选择一条记录进行浏览!", 1500);
  911. } else {
  912. bzjh = {
  913. 'jhmc':data[0].jhmc,
  914. 'nf':data[0].nf,
  915. 'bzbl':data[0].bzbl,
  916. 'bzje':data[0].bzje,
  917. 'cjsj':data[0].cjsj
  918. }
  919. layer.open({
  920. title: '浏览报账计划',
  921. type: 2,
  922. maxmin: true,
  923. shade: 0.2,
  924. area: [layerwidth + 'px', layerheight + 'px'],
  925. content: AjaxUtil.ctx + 'prjReimbursementplan/forView',
  926. end: function () {
  927. }
  928. });
  929. }
  930. });
  931. // 监听删除按钮(报账计划)
  932. $("button[lay-filter='btnDelete3']").click(function () {
  933. var subTopics = table.cache["currentTableId"];
  934. if (subTopics.length == 0)
  935. return;
  936. var checkStatus = table.checkStatus('currentTableId')
  937. , data = checkStatus.data;
  938. if (data == null || data.length === 0) {
  939. Message.warning("请选择要删除的报账计划!", 1500);
  940. } else {
  941. layer.confirm('确定删除所选中的报账计划吗?', function (index) {
  942. layer.close(index);
  943. for (var i = 0; i < subTopics.length; i++) {
  944. var item = subTopics[i];
  945. if (item.LAY_CHECKED) {//条件:选中
  946. subTopics.splice(i, 1);//移除后后造成数组下标索引发生变化,所以下面需要i--
  947. i--;
  948. }
  949. }
  950. //刷新表格
  951. var currData = subTopics;
  952. table.reload('currentTableId', {
  953. data: currData
  954. });
  955. });
  956. }
  957. });
  958. //双击(报账计划)
  959. table.on('rowDouble(currentTableFilter)', function (obj) {
  960. var data = obj.data;
  961. bzjh = {
  962. 'jhmc':data.jhmc,
  963. 'nf':data.nf,
  964. 'bzbl':data.bzbl,
  965. 'bzje':data.bzje,
  966. 'cjsj':data.cjsj
  967. }
  968. layer.open({
  969. title: '浏览报账计划',
  970. type: 2,
  971. maxmin: true,
  972. shade: 0.2,
  973. area: [layerwidth + 'px', layerheight + 'px'],
  974. content: AjaxUtil.ctx + 'prjReimbursementplan/forView',
  975. end: function (index) {
  976. layer.close(index);
  977. }
  978. });
  979. });
  980. //提交报账计划
  981. form.on('submit(saveBtn3)', function (data) {
  982. var subTopics = table.cache["currentTableId"];
  983. // 获取合同金额,并保留 小数点后八位
  984. const htje =parseFloat($("#htje").val()).toFixed(8);
  985. var prjReimbursementplanList =[];
  986. var count = 0;
  987. let sum =0;
  988. if (!subTopics && subTopics.length === 0) {
  989. Message.warning("请先创建报账计划!!!", 1500);
  990. return;
  991. }
  992. for (let i = 0; i < subTopics.length; i++) {
  993. let bzje = parseFloat(subTopics[i].bzje) || 0;
  994. let scaledValue = (bzje * 100000).toFixed(8);
  995. sum += parseFloat(scaledValue);
  996. }
  997. count = sum/100000;
  998. for (const item of subTopics) {
  999. var prjReimbursementplan = {
  1000. "id":item.id,
  1001. "nf": item.nf,
  1002. "ht": item.ht,
  1003. "jhmc": item.jhmc,
  1004. "rws": item.rws,
  1005. "bzbl": item.bzbl,
  1006. "bzje": item.bzje,
  1007. };
  1008. prjReimbursementplanList.push(prjReimbursementplan);
  1009. }
  1010. if (count>htje){
  1011. Message.warning("报账计划付款总金额大于合同金额!!!", 1500);
  1012. return;
  1013. }else if (count<htje){
  1014. Message.warning("报账计划付款总金额小于合同金额!", 1500);
  1015. return;
  1016. }else {
  1017. var index = layer.load(0, {shade: 0.1});
  1018. AjaxUtil.post({
  1019. url: AjaxUtil.ctx + "prjReimbursementplan/doAdd/?htje="+htje,
  1020. contentType: "application/json",
  1021. data: JSON.stringify(prjReimbursementplanList),
  1022. success: function (res) {
  1023. if (res.code == 0){
  1024. layer.msg(res.message,{icon:1},function () {
  1025. layer.close(index)
  1026. });
  1027. }else if (res.code == -1){
  1028. layer.msg(res.message,{icon:2},function () {
  1029. return;
  1030. })
  1031. }
  1032. },
  1033. error: function (error) {
  1034. Message.error(error.message, 1000);
  1035. }
  1036. });
  1037. }
  1038. });
  1039. var dataFkjh = [[${dataFkjh}]]
  1040. //付款计划
  1041. var currTable3 = table.render({
  1042. elem: '#currentTableId3',
  1043. data: dataFkjh,
  1044. cols: [
  1045. [
  1046. {type: "checkbox"},
  1047. {type: 'numbers', align: 'center',title: '序号'},
  1048. {field: 'jhmc', title: '计划名称', width: '15%'},
  1049. {field: 'fkyq', title: '付款要求', width: '20%'},
  1050. {field: 'zfbl', title: '支付比例(%)', width: '14%'},
  1051. {field: 'zfje', title: '支付金额(万元)', width: '16%'},
  1052. {field: 'cjsj', title: '创建时间', align: 'center'},
  1053. {field: 'countpay', title: '关联付款申请', hide: true}
  1054. ]
  1055. ],
  1056. autoSort: false,
  1057. parseData: function (res) { //res 即为原始返回的数据
  1058. return {
  1059. "code": res.code, //解析接口状态
  1060. "msg": res.message, //解析提示文本
  1061. "count": res.data.total, //解析数据长度
  1062. "data": res.data.rows //解析数据列表
  1063. };
  1064. }
  1065. });
  1066. //监听合同金额
  1067. $("#htje").blur(function (e) {
  1068. var htje = parseFloat(e.delegateTarget.value);
  1069. if (htje < 0) {
  1070. alert("金额不能为负数或无效的数字,请重新输入!");
  1071. e.delegateTarget.value = "";
  1072. }else if (htje>1000){
  1073. alert("合同金额单位为万元,请确认当前数据无误。")
  1074. }
  1075. });
  1076. // 监听新建按钮(付款计划)
  1077. $("button[lay-filter='btnAdd2']").click(function () {
  1078. htInfo = {
  1079. "rws": rwsId,
  1080. "ht": htId,
  1081. "htje": $("#htje").val()
  1082. }
  1083. layer.open({
  1084. title: '新建付款计划',
  1085. type: 2,
  1086. maxmin: true,
  1087. shade: 0.2,
  1088. area: [layerwidth + 'px', layerheight + 'px'],
  1089. content: AjaxUtil.ctx + 'prjPayplan/forAdd',
  1090. end: function (index) {
  1091. // 重载表格
  1092. if (updateflag == 1)
  1093. // currTable3.reload()
  1094. var oldData = table.cache["currentTableId3"];
  1095. console.log('新建前'+oldData)
  1096. oldData.push(fkjh);
  1097. console.log('新建后'+oldData)
  1098. if (oldData != '' && oldData !=null) {
  1099. table.reload('currentTableId3', {
  1100. data: oldData,
  1101. })
  1102. }
  1103. updateflag = 0;
  1104. }
  1105. });
  1106. });
  1107. // 监听编辑按钮(付款计划)
  1108. $("button[lay-filter='btnEdit2']").click(function () {
  1109. var subTopics = table.cache["currentTableId3"];
  1110. if (subTopics.length == 0)
  1111. return;
  1112. var checkStatus = table.checkStatus('currentTableId3')
  1113. , data = checkStatus.data;
  1114. if (data == null || data.length === 0) {
  1115. Message.warning("请选择要编辑的付款计划!", 1500);
  1116. } else if (data.length > 1) {
  1117. Message.warning("请选择一条记录进行编辑!", 1500);
  1118. } else {
  1119. htInfo = {
  1120. "htje": $("#htje").val()
  1121. }
  1122. fkjh = {
  1123. 'id':data[0].id,
  1124. 'fysq':data[0].fysq,
  1125. 'rws':data[0].rws,
  1126. 'ht':data[0].ht,
  1127. 'cjr':data[0].cjr,
  1128. 'jhmc':data[0].jhmc,
  1129. 'fkyq':data[0].fkyq,
  1130. 'zfbl':data[0].zfbl,
  1131. 'zfje':data[0].zfje,
  1132. 'cjsj':data[0].cjsj,
  1133. 'fkxx':data[0].fkxx,
  1134. }
  1135. layer.open({
  1136. title: '编辑付款计划',
  1137. type: 2,
  1138. maxmin: true,
  1139. shade: 0.2,
  1140. area: [layerwidth + 'px', layerheight + 'px'],
  1141. content: AjaxUtil.ctx + 'prjPayplan/forUpdate',
  1142. end: function (index) {
  1143. // 重载表格
  1144. if (updateflag == 1)
  1145. console.log('编辑前'+subTopics)
  1146. updateflag = 0;
  1147. for (var i = 0; i < subTopics.length; i++) {
  1148. var item = subTopics[i];
  1149. if (item.LAY_CHECKED) {//选中
  1150. subTopics[i] = fkjh;
  1151. break;
  1152. }
  1153. }
  1154. //刷新表格
  1155. var currData = subTopics;
  1156. console.log('编辑后'+currData)
  1157. console.log(currData)
  1158. table.reload('currentTableId3', {
  1159. data: currData
  1160. });
  1161. }
  1162. });
  1163. }
  1164. });
  1165. // 监听查看按钮(付款计划)
  1166. $("button[lay-filter='btnView2']").click(function () {
  1167. var subTopics = table.cache["currentTableId3"];
  1168. if (subTopics.length == 0)
  1169. return;
  1170. var checkStatus = table.checkStatus('currentTableId3')
  1171. , data = checkStatus.data;
  1172. if (data == null || data.length === 0) {
  1173. Message.warning("请选择要浏览的付款计划!", 1500);
  1174. } else if (data.length > 1) {
  1175. Message.warning("请选择一条记录进行浏览!", 1500);
  1176. } else {
  1177. fkjh = {
  1178. 'jhmc':data[0].jhmc,
  1179. 'fkyq':data[0].fkyq,
  1180. 'zfbl':data[0].zfbl,
  1181. 'zfje':data[0].zfje,
  1182. 'cjsj':data[0].cjsj,
  1183. 'fkxx':data[0].fkxx,
  1184. }
  1185. layer.open({
  1186. title: '浏览付款计划',
  1187. type: 2,
  1188. maxmin: true,
  1189. shade: 0.2,
  1190. area: [layerwidth + 'px', layerheight + 'px'],
  1191. content: AjaxUtil.ctx + 'prjPayplan/forView1',
  1192. end: function () {
  1193. }
  1194. });
  1195. }
  1196. });
  1197. // 监听删除按钮(付款计划)
  1198. $("button[lay-filter='btnDelete2']").click(function () {
  1199. var subTopics = table.cache["currentTableId3"];
  1200. if (subTopics.length == 0)
  1201. return;
  1202. var checkStatus = table.checkStatus('currentTableId3')
  1203. , data = checkStatus.data;
  1204. if (data == null || data.length === 0) {
  1205. Message.warning("请选择要删除的付款计划!", 1500);
  1206. } else {
  1207. var failedItems = data.filter(item => item.countpay > 0);
  1208. if (failedItems.length > 0) {
  1209. var failedMessages = failedItems.map(item => `计划名称: ${item.jhmc}, 关联的付款计划个数: ${item.countpay}`).join(', ');
  1210. Message.warning(`删除失败:以下付款计划已经付款: ${failedMessages}`, 1500);
  1211. } else {
  1212. layer.confirm('确定删除所选中的付款计划吗?', function (index) {
  1213. layer.close(index);
  1214. for (var i = 0; i < subTopics.length; i++) {
  1215. var item = subTopics[i];
  1216. if (item.LAY_CHECKED) {//条件:选中
  1217. subTopics.splice(i, 1);//移除后后造成数组下标索引发生变化,所以下面需要i--
  1218. i--;
  1219. }
  1220. }
  1221. //刷新表格
  1222. var currData = subTopics;
  1223. table.reload('currentTableId3', {
  1224. data: currData
  1225. });
  1226. });
  1227. }
  1228. }
  1229. });
  1230. //双击(付款计划)
  1231. table.on('rowDouble(currentTableFilter3)', function (obj) {
  1232. var data = obj.data;
  1233. fkjh = {
  1234. 'jhmc':data.jhmc,
  1235. 'fkyq':data.fkyq,
  1236. 'zfbl':data.zfbl,
  1237. 'zfje':data.zfje,
  1238. 'cjsj':data.cjsj,
  1239. 'fkxx':data.fkxx,
  1240. }
  1241. layer.open({
  1242. title: '浏览付款计划',
  1243. type: 2,
  1244. maxmin: true,
  1245. shade: 0.2,
  1246. area: [layerwidth + 'px', layerheight + 'px'],
  1247. content: AjaxUtil.ctx + 'prjPayplan/forView1',
  1248. end: function (index) {
  1249. layer.close(index);
  1250. }
  1251. });
  1252. });
  1253. //监听付款计划保存按钮
  1254. form.on('submit(saveBtn2)', function (data) {
  1255. var subTopics = table.cache["currentTableId3"];
  1256. var htje =parseFloat($("#htje").val())
  1257. var prjPayplanList =[];
  1258. var count = 0;
  1259. var sum = 0;
  1260. if (!subTopics && subTopics.length === 0) {
  1261. Message.warning("请先创建付款计划!!!", 1500);
  1262. return;
  1263. }
  1264. for (let i = 0; i < subTopics.length; i++) {
  1265. let zfje = parseFloat(subTopics[i].zfje) || 0;
  1266. let scaledValue = (zfje * 100000).toFixed(8);
  1267. sum += parseFloat(scaledValue);
  1268. }
  1269. count =sum/100000;
  1270. for (const item of subTopics) {
  1271. var prjPayplan = {
  1272. "id":item.id,
  1273. "fkxx": item.fkxx,
  1274. "fkyq": item.fkyq,
  1275. "ht": item.ht,
  1276. "jhmc": item.jhmc,
  1277. "rws": item.rws,
  1278. "zfbl": item.zfbl,
  1279. "zfje": item.zfje,
  1280. };
  1281. prjPayplanList.push(prjPayplan);
  1282. }
  1283. console.log(sum)
  1284. console.log(count)
  1285. console.log(htje)
  1286. console.log(subTopics)
  1287. if (count>htje){
  1288. Message.warning("付款计划付款总金额大于合同金额!!!", 1500);
  1289. return;
  1290. }else if (count<htje){
  1291. Message.warning("付款计划付款总金额小于合同金额!!!", 1500);
  1292. return;
  1293. }else {
  1294. var index = layer.load(0, {shade: 0.1});
  1295. AjaxUtil.post({
  1296. url: AjaxUtil.ctx + "prjPayplan/doAdd1/?htje="+htje,
  1297. contentType: "application/json",
  1298. data: JSON.stringify(prjPayplanList),
  1299. success: function (res) {
  1300. if (res.code ==-1){
  1301. layer.close(index);
  1302. Message.warning(res.message,1500)
  1303. }else {
  1304. Message.success(res.message,1500)
  1305. layer.close(index);
  1306. var iframeIndex = parent.layer.getFrameIndex(window.name);
  1307. setTimeout(function() {
  1308. parent.layer.close(iframeIndex);
  1309. }, 1500);
  1310. }
  1311. },
  1312. error: function (error) {
  1313. Message.error(error.message, 1000);
  1314. }
  1315. });
  1316. }
  1317. });
  1318. // 监听取消按钮
  1319. $("button[lay-filter='cancleBtn']").click(function () {
  1320. var iframeIndex = parent.layer.getFrameIndex(window.name);
  1321. parent.layer.close(iframeIndex);
  1322. });
  1323. });
  1324. function getHtInfo() {
  1325. return htInfo;
  1326. }
  1327. function getBzjh() {
  1328. return bzjh;
  1329. }
  1330. function setBzjh(expense) {
  1331. bzjh = expense;
  1332. }
  1333. function getFkjh() {
  1334. return fkjh;
  1335. }
  1336. function setFkjh(expense) {
  1337. fkjh = expense;
  1338. }
  1339. function setUpdateFlag() {
  1340. updateflag = 1;
  1341. }
  1342. function getNf() {
  1343. return nf;
  1344. }
  1345. </script>
  1346. </body>
  1347. </html>