index.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. (function () {
  2. var addDataThat = null;
  3. let isTimes = []
  4. let costTypeJSON = JSON.parse(document.querySelector('#costTypeJSON').value)
  5. let viewState = z.ui.comm.getUrlParam("_o");
  6. let read = z.ui.comm.getUrlParam("read");
  7. window.onload = function (ex) {
  8. $("#selectProject").click(function () {
  9. selectProject(null, setProject);
  10. })
  11. initCompany();
  12. bindEvents();
  13. let timeObject = document.querySelector('#detailList')
  14. let arrays = JSON.parse(timeObject.value)
  15. addDataThat = $("#addData")
  16. //根据返回的json对象渲染
  17. $("#addData").click(function () {
  18. addDataThat.attr('disabled', "true");
  19. let obj = {
  20. costType: "",
  21. costContent: "",
  22. invoiceNums:"",
  23. amount: "",
  24. remark: "",
  25. id: "",
  26. useMoneyId: "",
  27. }
  28. isTimes.push(obj)
  29. generateTableTrHtml(isTimes.length-1)
  30. buildQjsjSeq();
  31. })
  32. if (arrays.length > 0) {
  33. for (let i = 0; i < arrays.length; i++) {
  34. let obj = {
  35. costType: arrays[i].costType?arrays[i].costType:'',
  36. costContent: arrays[i].costContent?arrays[i].costContent:'',
  37. invoiceNums: arrays[i].invoiceNums?arrays[i].invoiceNums:'',
  38. amount: arrays[i].amount?arrays[i].amount:'',
  39. remark: arrays[i].remark?arrays[i].remark:'',
  40. id: arrays[i].id?arrays[i].id:'',
  41. useMoneyId: arrays[i].useMoneyId?arrays[i].useMoneyId:'',
  42. }
  43. isTimes.push(obj)
  44. }
  45. for (let i = 0; i < isTimes.length; i++) {
  46. generateTableTrHtml(i);
  47. }
  48. }
  49. }
  50. //注册业务保存事件
  51. function bindEvents() {
  52. var sqd=$("#sfsqd").val();
  53. if(z.ui.comm.getUrlParam("_o") == "v"||sqd=='2'){
  54. $(".z-comp-date").addClass("z-readonly");
  55. $(".z-comp-input").addClass("z-readonly");
  56. $(".z-comp-selecttree").addClass("z-readonly");
  57. $(".z-comp-select").addClass("z-readonly");
  58. $(".z-comp-textarea").addClass("z-readonly");
  59. }
  60. var list = JSON.parse(window.glhtlist);
  61. var html="";
  62. if(list.instanceId){
  63. html +="<a onclick=goAsset('"+list.instanceId+"')>"+list.projectName+"("+list.applyDate.substring(0,10)+")</a>";
  64. }
  65. $("#glhthtml").html(html);
  66. z.workflow.saveBtn.addListener("onSaveClick", saveForm);
  67. }
  68. function generateTableTrHtml(i) {
  69. var trDom = document.createElement("tr");
  70. trDom.style.backgroundColor = "#fff";
  71. trDom.id = "qjsj_" + i;
  72. trDom.className = 'qjsjClass'
  73. trDom.innerHTML = '<td name="qjsj_seq">' + (i + 1) + '</td>'
  74. + '<td style="display:none">'
  75. + '<div class="form-flex">'
  76. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  77. + '<div class="z-comp-date" name="UserMoneyDetailDO[' + i + ']$id">'
  78. + '<input type="text" value="">'
  79. + '</div>'
  80. + '</div>'
  81. + '</div>'
  82. + '</td>'
  83. + '<td>'
  84. + '<div class="form-flex">'
  85. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  86. + '<div class="z-comp-selecttree" name="costType[' + i + ']">'
  87. + '<input type="hidden" name="UserMoneyDetailDO[' + i + ']$costType">'
  88. + '<div class="z-inputselect-bar">'
  89. + '<span></span><i></i>'
  90. + '</div>'
  91. + '</div>'
  92. + '</div>'
  93. + '</div>'
  94. + '</td>'
  95. + '<td>'
  96. + '<div class="form-item">'
  97. + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$costContent">'
  98. + '<input type="text" value="">'
  99. + '</div>'
  100. + '</div>'
  101. + '</td>'
  102. + '<td>'
  103. + '<div class="form-item">'
  104. + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$invoiceNums">'
  105. + '<input type="number" value="">'
  106. + '</div>'
  107. + '</div>'
  108. + '</td>'
  109. + '<td>'
  110. + '<div class="form-item">'
  111. + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$amount">'
  112. + '<input type="number" value="">'
  113. + '</div>'
  114. + '</div>'
  115. + '</td>'
  116. + '<td>'
  117. + '<div class="form-item">'
  118. + '<div class="z-comp-input" name="UserMoneyDetailDO[' + i + ']$remark">'
  119. + '<input type="text" value="">'
  120. + '</div>'
  121. + '</div>'
  122. + '</td>'
  123. + '<td>'
  124. + '<div style="display: flex;white-space: nowrap;">'
  125. + '<div id="editBtn_' + (i) + '" class="table-btn editBtn_' + (i) + '" data-index="' + (i) + '">'
  126. + '<span>保存</span>'
  127. + '</div>'
  128. + '<div id="delBtn_' + (i) + '" class="table-btn delBtn_' + (i) + '" data-index="' + (i) + '">'
  129. + '<span>删除</span>'
  130. + '</div>'
  131. + '</div>'
  132. + '</td>';
  133. let trFragment = document.createDocumentFragment();
  134. trFragment.appendChild(trDom);
  135. $(".tbody").append(trFragment)
  136. costTypeJSON.forEach(obj => {
  137. obj.treeName = 'UserMoneyDetailDO[' + i + ']$costType';
  138. })
  139. selecttree("[name='costType[" + i + "]']", costTypeJSON, clickCostType, allowChildClick)
  140. z.ui.selecttree("[name='costType[" + i + "]']").setValue(isTimes[i].costType);
  141. $("[name='UserMoneyDetailDO[" + i + "]$costType']").val(isTimes[i].costType);
  142. if (!(!isTimes[i].id || isTimes[i].id.trim() === '')) {
  143. $("[name='UserMoneyDetailDO[" + i + "]$id']").val(isTimes[i].id);
  144. }
  145. if (!(!isTimes[i].costContent || isTimes[i].costContent.trim() === '')) {
  146. z.ui.input("[name='UserMoneyDetailDO[" + i + "]$costContent']").setValue(isTimes[i].costContent);
  147. }
  148. if (!(!isTimes[i].invoiceNums )) {
  149. z.ui.input("[name='UserMoneyDetailDO[" + i + "]$invoiceNums']").setValue(isTimes[i].invoiceNums);
  150. }
  151. if (!(!isTimes[i].amount)) {
  152. z.ui.input("[name='UserMoneyDetailDO[" + i + "]$amount']").setValue(isTimes[i].amount);
  153. }
  154. if (!(!isTimes[i].remark || isTimes[i].remark.trim() === '')) {
  155. z.ui.input("[name='UserMoneyDetailDO[" + i + "]$remark']").setValue(isTimes[i].remark);
  156. }
  157. if (!(!isTimes[i].useMoneyId || isTimes[i].useMoneyId.trim() === '')) {
  158. $("#editBtn_" + i).find("span").html("编辑")
  159. detailReadonly(i, false)
  160. $("#qjsj_" + i).addClass("form-table-disable")
  161. }
  162. detailTotalInit(i)
  163. $("#editBtn_" + i).click(function () {
  164. const span = $(this).find("span");
  165. const html = span.html();
  166. if (html === '编辑') {
  167. span.html('保存')
  168. detailWrite(i);
  169. addDataThat.attr('disabled', "true");
  170. $("#qjsj_" + i).removeClass("form-table-disable")
  171. return;
  172. }
  173. if (html === '保存') {
  174. if(!$("[name='UserMoneyDetailDO[" + i + "]$costType']").val()){
  175. z.ui.alertWarning(`实际所属类型不能为空!`)
  176. return false;
  177. }else if($("[name='UserMoneyDetailDO[" + i + "]$costType']").val()=='1401'||$("[name='UserMoneyDetailDO[" + i + "]$costType']").val()=='1402'
  178. ||$("[name='UserMoneyDetailDO[" + i + "]$costType']").val()=='1403'){
  179. if(!z.ui.input("[name='UserMoneyDetailDO[" + i + "]$remark']").getValue()){
  180. z.ui.alertWarning(`类型为保证金/押金的情况下,备注不能为空!`)
  181. return false;
  182. }
  183. }
  184. if(!z.ui.input("[name='UserMoneyDetailDO[" + i + "]$costContent']").getValue()){
  185. z.ui.alertWarning(`用途不能为空!`)
  186. return false;
  187. }
  188. if(!z.ui.input("[name='UserMoneyDetailDO[" + i + "]$invoiceNums']").getValue()){
  189. z.ui.alertWarning(`单据张数不能为空!`)
  190. return false;
  191. }
  192. if(!z.ui.input("[name='UserMoneyDetailDO[" + i + "]$amount']").getValue()){
  193. z.ui.alertWarning(`金额不能为空!`)
  194. return false;
  195. }
  196. span.html('编辑')
  197. detailReadonly(i, false)
  198. addDataThat.removeAttr('disabled')
  199. $("#qjsj_" + i).addClass("form-table-disable")
  200. return;
  201. }
  202. })
  203. $("#delBtn_" + i).click(function () {
  204. z.ui.confirm("compid").init({
  205. content: "确定删除吗?",
  206. onConfirm: function () {
  207. var element = document.getElementById("qjsj_" + i);
  208. element.remove();
  209. buildQjsjSeq();
  210. isTimes = isTimes.splice(i, 1)
  211. jeSumInit(i);
  212. addDataThat.removeAttr('disabled')
  213. },
  214. onCancel: function () {
  215. }
  216. })
  217. })
  218. if (viewState === 'v' || read === '1') {
  219. detailReadonly(i)
  220. }
  221. }
  222. function detailReadonly(i, isBool = true) {
  223. if (isBool) {
  224. $("#addData").hide();
  225. $("#delBtn_" + i).css("display", "none");
  226. $("#editBtn_" + i).css("display", "none");
  227. }
  228. $("[name='costType[" + i + "]']").addClass("z-readonly");
  229. $("#selectProject_" + i).css("pointer-events", "none");
  230. $("[name='costType[" + i + "]']").css("pointer-events", "none");
  231. let detailElement = document.getElementById("qjsj_" + i);
  232. let detailInput = detailElement.getElementsByTagName("input");
  233. for (let j = 0; j < detailInput.length; j++) {
  234. detailInput[j].disabled = true;
  235. detailInput[j].className += "z-readonly"
  236. }
  237. }
  238. function detailWrite(i) {
  239. //财务审核时可以核减修改金额
  240. $("[name='costType[" + i + "]']").removeClass("z-readonly");
  241. $("#selectProject_" + i).css("pointer-events", "auto");
  242. $("[name='costType[" + i + "]']").css("pointer-events", "auto");
  243. let detailElement = document.getElementById("qjsj_" + i);
  244. let detailInput = detailElement.getElementsByTagName("input");
  245. for (let j = 0; j < detailInput.length; j++) {
  246. detailInput[j].disabled = false;
  247. $(detailInput[j]).removeClass("z-readonly")
  248. }
  249. }
  250. function detailTotalInit(i) {
  251. let obj = {
  252. costType: "",
  253. costContent: "",
  254. invoiceNums: "",
  255. amount: "",
  256. remark: "",
  257. id: "",
  258. useMoneyId: "",
  259. }
  260. let inpsJe = $("[name='UserMoneyDetailDO[" + i + "]$amount']")[0].children[0]; //金额
  261. inpsJe.addEventListener("blur", e => {
  262. let event = e || window.event;
  263. let inputInfo = event.target.value;
  264. if (!(inputInfo > 0)) {
  265. z.ui.alertWarning(`金额不能为负数、0`)
  266. inpsJe.value = ''
  267. } else {
  268. obj.amount = inputInfo
  269. jeSumInit()
  270. }
  271. });
  272. }
  273. function buildQjsjSeq() {
  274. let elementsByName = document.getElementsByName("qjsj_seq");
  275. for (let i = 0; i < elementsByName.length; i++) {
  276. const seqElement = elementsByName[i];
  277. seqElement.innerHTML = i + 1;
  278. }
  279. }
  280. function jeSumInit(idx) {
  281. let jeSum = 0 //金额汇总
  282. for (let i = 0; i < isTimes.length; i++) {
  283. if (idx == i) {
  284. return
  285. } else {
  286. let inpsJe = $("[name='UserMoneyDetailDO[" + i + "]$amount']")[0].children[0]; //金额
  287. jeSum += Number(inpsJe.value)
  288. }
  289. }
  290. z.ui.input("[name='createReqVO$totalAmount']").setValue(jeSum);
  291. z.ui.input("[name='createReqVO$totalAmountCn']").setValue(convertCurrency(jeSum));
  292. }
  293. /*
  294. * all 工作流js传递到业务的参数 success执行的方法
  295. * istransfer 工作流js传递到业务的参数 是否转件
  296. * */
  297. function saveForm(all, istransfer) {
  298. var postData = z.ui.form.getFormFields($("[name=createReqVO]"));
  299. if (postData === false) {
  300. all({ success: false });
  301. return;
  302. }
  303. postData.createReqVO.instanceId = z.ui.comm.getUrlParam("flowInstanceId")
  304. var detailList = new Array()
  305. for (let key of Object.keys(postData)) {
  306. let mealName = postData[key];
  307. if (key.startsWith("UserMoneyDetailDO")) {
  308. detailList.push(z.ui.form.childStringify(mealName));
  309. }
  310. }
  311. postData.createReqVO.applyTime=Date.parse(postData.createReqVO.applyTime);
  312. postData.createReqVO.agreedPayTime=Date.parse(postData.createReqVO.agreedPayTime);
  313. postData.createReqVO.detailList = detailList;
  314. z.ui.ajax({
  315. type: "post",
  316. url: "/UseMoney/update",
  317. data: JSON.stringify(postData.createReqVO),
  318. contentType: "application/json",
  319. success: function () {
  320. all({ success: true });
  321. },
  322. error: function () {
  323. all({ success: false });
  324. }
  325. })
  326. }
  327. function setProject(res) {
  328. if (res.data) {
  329. $("[name='createReqVO$projectId']").val(res.data.id);
  330. z.ui.input("[name='createReqVO$projectName']").setValue(res.data.xmmc);
  331. z.ui.input("[name='createReqVO$xmbh']").setValue(res.data.xmbh);
  332. z.ui.input("[name='createReqVO$xmzrbm']").setValue(res.data.zrbm);
  333. z.ui.input("[name='createReqVO$hth']").setValue(res.data.contractNumber);
  334. }
  335. }
  336. function initCompany() {
  337. z.ui.ajax({
  338. type: "get",
  339. url: "/common/company-tree",
  340. data: {},
  341. success: function (res) {
  342. if (res && res.data.length > 0) {
  343. selecttree("[name='createReqVO$paymentCompany']", res.data, clickCompany)
  344. }
  345. },
  346. error: function () {
  347. }
  348. })
  349. }
  350. function clickCompany(even, treeId, treeNode) {
  351. $("[name='createReqVO$paymentCompanyId']").val(treeNode.id);
  352. }
  353. function clickCostType(even, treeId, treeNode) {
  354. $("[name='" + treeNode.treeName + "']").val(treeNode.id);
  355. }
  356. }());
  357. function goAsset(id){
  358. z.webcontainer.openTab({
  359. id: 'workflow_hangup_' + id,
  360. title: "流程查看",
  361. url: window.url + "/IFlowInstance/redirectFlowPage?flowInstanceId=" + id ,
  362. iconclass: 'fa fa-file'
  363. });
  364. }