agentIndex.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. (function () {
  2. var addDataThat = null;
  3. let isTimes = []
  4. let viewState = z.ui.comm.getUrlParam("_o");
  5. let read = z.ui.comm.getUrlParam("read");
  6. let finance = z.ui.comm.getUrlParam("finance");
  7. let detailProjectIndex = 0;
  8. let previousAmount = z.ui.input("[name='createReqVO$totalAmount']").getValue();
  9. let costTypeJSON = JSON.parse(document.querySelector('#costTypeJSON').value)
  10. let lastProjectId = '';
  11. let lastProjectName = '';
  12. let lastProjectDeptName = '';
  13. window.onload = function (ex) {
  14. let timeObject = document.querySelector('#detailList')
  15. let arrays = JSON.parse(timeObject.value)
  16. addDataThat = $("#addData")
  17. $("#addData").click(function () {
  18. addDataThat.attr('disabled', "true");
  19. let obj = {
  20. amount: "",
  21. bz1: "",
  22. costType: "",
  23. commonCostId: "",
  24. costContent: "",
  25. costDate: "",
  26. createTime: "",
  27. id: "",
  28. invoiceNums: "",
  29. isvalid: "",
  30. latestModifyTime: "",
  31. projectId: "",
  32. projectName: "",
  33. projectDeptName: "",
  34. }
  35. isTimes.push(obj)
  36. generateTableTrHtml(isTimes.length-1)
  37. buildQjsjSeq();
  38. })
  39. $("#selectProject").click(function () {
  40. selectProjectAll(null, setProject);
  41. })
  42. initCompany();
  43. bindEvents();
  44. //根据返回的json对象渲染
  45. if (arrays.length > 0) {
  46. for (let i = 0; i < arrays.length; i++) {
  47. let obj = {
  48. amount: arrays[i].amount || '',
  49. bz1: arrays[i].bz1 || '',
  50. costType: arrays[i].costType || '',
  51. commonCostId: arrays[i].commonCostId || '',
  52. costContent: arrays[i].costContent || '',
  53. costDate: arrays[i].costDate || '',
  54. createTime: arrays[i].createTime || '',
  55. id: arrays[i].id || '',
  56. invoiceNums: arrays[i].invoiceNums || '',
  57. isvalid: arrays[i].isvalid || '',
  58. latestModifyTime: arrays[i].latestModifyTime || '',
  59. projectId: arrays[i].projectId || '',
  60. projectName: arrays[i].projectName || '',
  61. projectDeptName: arrays[i].projectDeptName || '',
  62. index: i
  63. }
  64. isTimes.push(obj)
  65. }
  66. for (let i = 0; i < isTimes.length; i++) {
  67. generateTableTrHtml(i);
  68. }
  69. }
  70. let bz2 = $("[name='createReqVO$bz2']").val();
  71. if(finance === "1"){
  72. if(!bz2){
  73. bz2 = 0;
  74. }
  75. let amount = Number(previousAmount) + Number(bz2);
  76. let previousHtml = "(原金额:"+ amount.toFixed(2) +")"
  77. $("#previousAmount").text(previousHtml)
  78. }
  79. if(bz2){
  80. let amount = Number(previousAmount) + Number(bz2);
  81. let previousHtml = "(原金额:"+ amount.toFixed(2) +")"
  82. $("#previousAmount").text(previousHtml)
  83. }
  84. }
  85. function generateTableTrHtml(i) {
  86. var trDom = document.createElement("tr");
  87. trDom.style.backgroundColor = "#fff";
  88. trDom.id = "qjsj_" + i;
  89. trDom.className = 'qjsjClass'
  90. trDom.innerHTML = '<td name="qjsj_seq">' + (i + 1) + '</td>'
  91. + '<td>'
  92. + '<div class="form-flex">'
  93. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  94. + '<input type="hidden" name="CommonCostDetailDO[' + i + ']$projectId" value="">'
  95. + '<div class="z-comp-input z-readonly" id="selectProject_' + i + '" name="CommonCostDetailDO[' + i + ']$projectName">'
  96. + '<input readonly type="text" value="">'
  97. + '</div>'
  98. + '</div>'
  99. + '</div>'
  100. + '</td>'
  101. + '<td>'
  102. + '<div class="form-item">'
  103. + '<div class="z-comp-input z-readonly" name="CommonCostDetailDO[' + i + ']$xmzrbm">'
  104. + '<input readonly type="text" value="">'
  105. + '</div>'
  106. + '</div>'
  107. + '</td>'
  108. + '<td>'
  109. + '<div class="form-flex">'
  110. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  111. + '<div class="z-comp-date" name="CommonCostDetailDO[' + i + ']$costDate">'
  112. + '<input type="text" value="">'
  113. + '</div>'
  114. + '</div>'
  115. + '</div>'
  116. + '</td>'
  117. + '<td>'
  118. + '<div class="form-flex">'
  119. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  120. + '<div class="z-comp-selecttree" name="costType[' + i + ']">'
  121. + '<input type="hidden" name="CommonCostDetailDO[' + i + ']$costType">'
  122. + '<div class="z-inputselect-bar">'
  123. + '<span></span><i></i>'
  124. + '</div>'
  125. + '</div>'
  126. + '</div>'
  127. + '</div>'
  128. + '</td>'
  129. + '<td>'
  130. + '<div class="form-item">'
  131. + '<div class="z-comp-input" name="CommonCostDetailDO[' + i + ']$costContent">'
  132. + '<input type="text" value="">'
  133. + '</div>'
  134. + '</div>'
  135. + '</td>'
  136. + '<td>'
  137. + '<div class="form-item">'
  138. + '<div class="z-comp-input" name="CommonCostDetailDO[' + i + ']$invoiceNums">'
  139. + '<input type="number" value="">'
  140. + '</div>'
  141. + '</div>'
  142. + '</td>'
  143. + '<td>'
  144. + '<div class="form-item">'
  145. + '<div class="z-comp-input" name="CommonCostDetailDO[' + i + ']$amount">'
  146. + '<input type="number" name="amountNumber" value="">'
  147. + '</div>'
  148. + '</div>'
  149. + '</td>'
  150. + '<td>'
  151. + '<div class="form-item">'
  152. + '<div class="z-comp-input" name="CommonCostDetailDO[' + i + ']$bz1">'
  153. + '<input type="text" value="">'
  154. + '</div>'
  155. + '</div>'
  156. + '</td>'
  157. + '<td>'
  158. + '<div style="display: flex;white-space: nowrap">'
  159. + '<div id="editBtn_' + (i) + '" style="margin: 0 10px" class="table-btn editBtn_' + (i) + '" data-index="' + (i) + '">'
  160. + '<span>保存</span>'
  161. + '</div>'
  162. + '<div id="delBtn_' + (i) + '" style="margin: 0 10px" class="table-btn delBtn_' + (i) + '" data-index="' + (i) + '">'
  163. + '<span>删除</span>'
  164. + '</div>'
  165. + '</div>'
  166. + '</td>';
  167. let trFragment = document.createDocumentFragment();
  168. trFragment.appendChild(trDom);
  169. $(".tbody").append(trFragment)
  170. costTypeJSON.forEach(obj => {
  171. obj.treeName = 'CommonCostDetailDO[' + i + ']$costType';
  172. })
  173. selecttree("[name='costType[" + i + "]']", costTypeJSON, clickCostType, allowChildClick)
  174. z.ui.date("[name='CommonCostDetailDO[" + i + "]$costDate']").init()
  175. if (!(!isTimes[i].costType || isTimes[i].costType.trim() === '')) {
  176. z.ui.selecttree("[name='costType[" + i + "]']").setValue(isTimes[i].costType)
  177. $("[name='CommonCostDetailDO[" + i + "]$costType']").val(isTimes[i].costType);
  178. }
  179. if(!(!lastProjectId || lastProjectId.trim() === '')){
  180. $("[name='CommonCostDetailDO[" + i + "]$projectId']").val(lastProjectId);
  181. }
  182. if(!(!lastProjectName || lastProjectName.trim() === '')){
  183. z.ui.input("[name='CommonCostDetailDO[" + i + "]$projectName']").setValue(lastProjectName);
  184. }
  185. if(!(!lastProjectDeptName || lastProjectDeptName.trim() === '')){
  186. z.ui.input("[name='CommonCostDetailDO[" + i + "]$xmzrbm']").setValue(lastProjectDeptName);
  187. }
  188. if (!(!isTimes[i].projectId || isTimes[i].projectId.trim() === '')) {
  189. $("[name='CommonCostDetailDO[" + i + "]$projectId']").val(isTimes[i].projectId);
  190. }
  191. if (!(!isTimes[i].projectName || isTimes[i].projectName.trim() === '')) {
  192. z.ui.input("[name='CommonCostDetailDO[" + i + "]$projectName']").setValue(isTimes[i].projectName);
  193. }
  194. if (!(!isTimes[i].projectDeptName || isTimes[i].projectDeptName.trim() === '')) {
  195. z.ui.input("[name='CommonCostDetailDO[" + i + "]$xmzrbm']").setValue(isTimes[i].projectDeptName);
  196. }
  197. if (!(!isTimes[i].costDate || isTimes[i].costDate.trim() === '')) {
  198. z.ui.date("[name='CommonCostDetailDO[" + i + "]$costDate']").setValue(isTimes[i].costDate);
  199. }
  200. if (!(!isTimes[i].costContent || isTimes[i].costContent.trim() === '')) {
  201. z.ui.input("[name='CommonCostDetailDO[" + i + "]$costContent']").setValue(isTimes[i].costContent);
  202. }
  203. if (isTimes[i].invoiceNums != '') {
  204. z.ui.input("[name='CommonCostDetailDO[" + i + "]$invoiceNums']").setValue(isTimes[i].invoiceNums);
  205. }
  206. if (isTimes[i].amount != '') {
  207. z.ui.input("[name='CommonCostDetailDO[" + i + "]$amount']").setValue(isTimes[i].amount);
  208. }
  209. if (!(!isTimes[i].bz1 || isTimes[i].bz1.trim() === '')) {
  210. z.ui.input("[name='CommonCostDetailDO[" + i + "]$bz1']").setValue(isTimes[i].bz1);
  211. }
  212. if (!(!isTimes[i].commonCostId || isTimes[i].commonCostId.trim() === '')) {
  213. $("#editBtn_" + i).find("span").html("编辑")
  214. detailReadonly(i, false)
  215. $("#qjsj_" + i).addClass("form-table-disable")
  216. }
  217. $("#selectProject_" + i).click(function () {
  218. detailProjectIndex = i;
  219. selectProjectAll(null, setProject);
  220. })
  221. detailTotalInit(i)
  222. $("#editBtn_" + i).click(function () {
  223. const span = $(this).find("span");
  224. const html = span.html();
  225. if (html === '编辑') {
  226. span.html('保存')
  227. detailWrite(i);
  228. addDataThat.attr('disabled', "true");
  229. $("#qjsj_" + i).removeClass("form-table-disable")
  230. return;
  231. }
  232. if (html === '保存') {
  233. if(!$("[name='CommonCostDetailDO[" + i + "]$projectId']").val()){
  234. z.ui.alertWarning(`项目不能为空!`)
  235. return false;
  236. }
  237. lastProjectId = $("[name='CommonCostDetailDO[" + i + "]$projectId']").val();
  238. lastProjectName = z.ui.input("[name='CommonCostDetailDO[" + i + "]$projectName']").getValue();
  239. lastProjectDeptName = z.ui.input("[name='CommonCostDetailDO[" + i + "]$xmzrbm']").getValue();
  240. if(!z.ui.date("[name='CommonCostDetailDO[" + i + "]$costDate']").getValue()){
  241. z.ui.alertWarning(`发生日期不能为空!`)
  242. return false;
  243. }
  244. if(!$("[name='CommonCostDetailDO[" + i + "]$costType']").val()){
  245. z.ui.alertWarning(`费用实际所属类型不能为空!`)
  246. return false;
  247. }
  248. if(!z.ui.input("[name='CommonCostDetailDO[" + i + "]$costContent']").getValue()){
  249. z.ui.alertWarning(`发票内容不能为空!`)
  250. return false;
  251. }
  252. if(!z.ui.input("[name='CommonCostDetailDO[" + i + "]$invoiceNums']").getValue()){
  253. z.ui.alertWarning(`单据张数不能为空!`)
  254. return false;
  255. }
  256. if(!z.ui.input("[name='CommonCostDetailDO[" + i + "]$amount']").getValue()){
  257. z.ui.alertWarning(`金额不能为空!`)
  258. return false;
  259. }
  260. span.html('编辑')
  261. detailReadonly(i, false)
  262. addDataThat.removeAttr('disabled')
  263. $("#qjsj_" + i).addClass("form-table-disable")
  264. return;
  265. }
  266. })
  267. $("#delBtn_" + i).click(function () {
  268. z.ui.confirm("compid").init({
  269. content: "确定删除吗?",
  270. onConfirm: function () {
  271. var element = document.getElementById("qjsj_" + i);
  272. element.remove();
  273. buildQjsjSeq();
  274. jeSumInit(i);
  275. addDataThat.removeAttr('disabled')
  276. },
  277. onCancel: function () {
  278. }
  279. })
  280. })
  281. if (viewState === 'v' || (read === '1'&& finance != '1')) {
  282. detailReadonly(i)
  283. }
  284. }
  285. function detailReadonly(i, isBool = true) {
  286. if (isBool) {
  287. $("#delBtn_" + i).css("display", "none");
  288. $("#editBtn_" + i).css("display", "none");
  289. }
  290. $("[name='costType[" + i + "]']").addClass("z-readonly");
  291. $("#selectProject_" + i).css("pointer-events", "none");
  292. $("[name='costType[" + i + "]']").css("pointer-events", "none");
  293. let detailElement = document.getElementById("qjsj_" + i);
  294. let detailInput = detailElement.getElementsByTagName("input");
  295. for (let j = 0; j < detailInput.length; j++) {
  296. detailInput[j].disabled = true;
  297. detailInput[j].className += "z-readonly"
  298. }
  299. }
  300. function detailWrite(i) {
  301. //财务审核时可以核减修改金额
  302. $("[name='costType[" + i + "]']").removeClass("z-readonly");
  303. $("#selectProject_" + i).css("pointer-events", "auto");
  304. $("[name='costType[" + i + "]']").css("pointer-events", "auto");
  305. let detailElement = document.getElementById("qjsj_" + i);
  306. let detailInput = detailElement.getElementsByTagName("input");
  307. for (let j = 0; j < detailInput.length; j++) {
  308. detailInput[j].disabled = false;
  309. $(detailInput[j]).removeClass("z-readonly")
  310. }
  311. }
  312. function detailTotalInit(i) {
  313. let obj = {
  314. amount: "",
  315. bz1: "",
  316. commonCostId: "",
  317. costContent: "",
  318. costDate: "",
  319. createTime: "",
  320. id: "",
  321. invoiceNums: "",
  322. isvalid: "",
  323. latestModifyTime: "",
  324. projectId: "",
  325. projectName: "",
  326. projectDeptName: ""
  327. }
  328. let inpsJe = $("[name='CommonCostDetailDO[" + i + "]$amount']")[0].children[0]; //金额
  329. let inpsPj = $("[name='CommonCostDetailDO[" + i + "]$invoiceNums']")[0].children[0];//单据张数
  330. inpsJe.addEventListener("blur", e => {
  331. let event = e || window.event;
  332. let inputInfo = event.target.value;
  333. if (!(inputInfo > 0)) {
  334. z.ui.alertWarning(`金额不能为负数、0`)
  335. inpsJe.value = ''
  336. } else {
  337. obj.amount = inputInfo
  338. jeSumInit()
  339. }
  340. });
  341. inpsPj.addEventListener("blur", e => {
  342. let event = e || window.event;
  343. let inputInfo = event.target.value;
  344. if (!(inputInfo > 0) || (String(inputInfo).indexOf('.') > -1)) {
  345. z.ui.alertWarning(`单据张数不能为负数、0、小数`)
  346. inpsPj.value = ''
  347. } else {
  348. obj.invoiceNums = inputInfo
  349. }
  350. });
  351. }
  352. function jeSumInit(idx) {
  353. let jeSum = 0 //金额汇总
  354. var className=$('input[name="amountNumber"]');;
  355. for (let i = 0; i < className.length; i++) {
  356. jeSum += Number(className[i].value)
  357. }
  358. z.ui.input("[name='createReqVO$totalAmount']").setValue(jeSum.toFixed(2));
  359. z.ui.input("[name='createReqVO$totalAmountCn']").setValue(convertCurrency(jeSum));
  360. }
  361. //注册业务保存事件
  362. function bindEvents() {
  363. var list = JSON.parse(window.glcglist);
  364. var html="";
  365. for(var i=0;i<list.length;i++){
  366. html +="<a onclick=goAsset('"+list[i].instanceId+"')>"+list[i].userNickname+"("+list[i].createTime.substring(0,10)+")</a>";
  367. }
  368. $("#glcghtml").html(html);
  369. z.workflow.saveBtn.addListener("onSaveClick", saveForm);
  370. }
  371. function buildQjsjSeq() {
  372. let elementsByName = document.getElementsByName("qjsj_seq");
  373. for (let i = 0; i < elementsByName.length; i++) {
  374. const seqElement = elementsByName[i];
  375. seqElement.innerHTML = i + 1;
  376. }
  377. }
  378. /*
  379. * all 工作流js传递到业务的参数 success执行的方法
  380. * istransfer 工作流js传递到业务的参数 是否转件
  381. * */
  382. function saveForm(all, istransfer) {
  383. var postData = z.ui.form.getFormFields($("[name=createReqVO]"));
  384. if (postData === false) {
  385. all({success: false});
  386. return;
  387. }
  388. postData.createReqVO.instanceId = z.ui.comm.getUrlParam("flowInstanceId");
  389. var detailList = new Array()
  390. for (let key of Object.keys(postData)) {
  391. let mealName = postData[key];
  392. if (key.startsWith("CommonCostDetailDO")) {
  393. mealName.costDate = Date.parse(mealName.costDate);
  394. detailList.push(z.ui.form.childStringify(mealName));
  395. }
  396. }
  397. if(finance === "1"){
  398. if(Number(postData.createReqVO.totalAmount) > Number(previousAmount)){
  399. all({success: false, errorMsg: "核减后金额不能大于原来金额!"});
  400. return;
  401. }
  402. //发生金额变化
  403. if(Number(postData.createReqVO.totalAmount) != Number(previousAmount)){
  404. let num = Number(previousAmount) - Number(postData.createReqVO.totalAmount);
  405. postData.createReqVO.bz3 = '发生了核减:'+'核减'+num+'(元)';
  406. postData.createReqVO.bz2 = num;
  407. }
  408. }
  409. postData.createReqVO.detailList = detailList;
  410. z.ui.ajax({
  411. type: "post",
  412. url: "/CommonCost/update",
  413. data: JSON.stringify(postData.createReqVO),
  414. contentType: "application/json",
  415. success: function () {
  416. all({success: true});
  417. },
  418. error: function () {
  419. all({success: false});
  420. }
  421. })
  422. }
  423. function setProject(res) {
  424. if (res.data) {
  425. $("[name='CommonCostDetailDO[" + detailProjectIndex + "]$projectId']").val(res.data.id);
  426. z.ui.input("[name='CommonCostDetailDO[" + detailProjectIndex + "]$projectName']").setValue(res.data.xmmc);
  427. z.ui.input("[name='CommonCostDetailDO[" + detailProjectIndex + "]$xmzrbm']").setValue(res.data.zrbm);
  428. }
  429. }
  430. function initCompany() {
  431. z.ui.ajax({
  432. type: "get",
  433. url: "/common/company-tree",
  434. data: {},
  435. success: function (res) {
  436. if (res && res.data.length > 0) {
  437. selecttree("[name='createReqVO$paymentCompany']", res.data, clickCompany)
  438. }
  439. },
  440. error: function () {
  441. }
  442. })
  443. }
  444. function clickCompany(even, treeId, treeNode) {
  445. $("[name='createReqVO$paymentCompanyId']").val(treeNode.id);
  446. }
  447. function clickCostType(even, treeId, treeNode) {
  448. $("[name='" + treeNode.treeName + "']").val(treeNode.id);
  449. }
  450. }());
  451. function goAsset(id){
  452. z.webcontainer.openTab({
  453. id: 'workflow_hangup_' + id,
  454. title: "流程查看",
  455. url: window.url + "/IFlowInstance/redirectFlowPage?flowInstanceId=" + id ,
  456. iconclass: 'fa fa-file'
  457. });
  458. }