index.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. (function () {
  2. var addDataThat = null;
  3. let viewState = z.ui.comm.getUrlParam("_o");
  4. let read = z.ui.comm.getUrlParam("read");
  5. window.onload = function (ex) {
  6. let timeObject = document.querySelector('#timeObject')
  7. let arrays = JSON.parse(timeObject.value)
  8. var lists = []
  9. var trFragment = document.createDocumentFragment();
  10. addDataThat = $("#addData")
  11. $("#addData").click(function () {
  12. addDataThat.attr('disabled', "true");
  13. var dataObj = {}
  14. trFragment.appendChild(generateTableTrHtml(lists.length))
  15. $(".tbody").append(trFragment)
  16. let listsLength = lists.length
  17. if (arrays.length > 0) {
  18. listsLength = arrays.length + lists.length
  19. }
  20. timeSelector({
  21. ele: ".startTimeRange" + listsLength,
  22. name: "TravelTimeDO[" + listsLength + "]$startTimeRange",
  23. callback: function (val) {
  24. let startDate = z.ui.laydate("[name='TravelTimeDO[" + listsLength + "]$startTime']").getValue();
  25. if (!startDate) {
  26. $("[name='TravelTimeDO[" + listsLength + "]$startTimeRange']").find("input").val("");
  27. z.ui.alertWarning("请先选择起始日期!")
  28. return;
  29. }
  30. }
  31. })
  32. timeSelector({
  33. ele: ".endTimeRange" + listsLength,
  34. name: "TravelTimeDO[" + listsLength + "]$endTimeRange",
  35. callback: function (val) {
  36. let endDate = z.ui.laydate("[name='TravelTimeDO[" + listsLength + "]$endTime']").getValue();
  37. if (!endDate) {
  38. $("[name='TravelTimeDO[" + listsLength + "]$endTimeRange']").find("input").val("");
  39. z.ui.alertWarning("请先选择截止日期!")
  40. return;
  41. }
  42. let endTime = Date.parse(endDate + " " + val);
  43. if (endTime <= timeObj.startTime) {
  44. z.ui.alertWarning("截止时间必须大于起始时间!")
  45. $("[name='TravelTimeDO[" + listsLength + "]$endTimeRange']").find("input").val("");
  46. z.ui.laydate("[name='TravelTimeDO[" + listsLength + "]$endTime']").setValue('');
  47. return;
  48. }
  49. }
  50. })
  51. $("#editBtn_" + listsLength).click(function () {
  52. const span = $(this).find("span");
  53. const html = span.html();
  54. if (html === '编辑') {
  55. span.html('保存')
  56. detailWrite(listsLength);
  57. addDataThat.attr('disabled', "true");
  58. $("#qjsj_" + listsLength).removeClass("form-table-disable")
  59. return;
  60. }
  61. if (html === '保存') {
  62. span.html('编辑')
  63. detailReadonly(listsLength, false)
  64. addDataThat.removeAttr('disabled')
  65. $("#qjsj_" + listsLength).addClass("form-table-disable")
  66. return;
  67. }
  68. })
  69. $("#delBtn_" + listsLength).click(function () {
  70. var index = this.id.substring(this.id.indexOf("_") + 1)
  71. z.ui.confirm("compid").init({
  72. content: "确定删除吗?",
  73. onConfirm: function () {
  74. var element = document.getElementById("qjsj_" + index);
  75. element.remove();
  76. buildQjsjSeq();
  77. addDataThat.removeAttr('disabled')
  78. },
  79. onCancel: function () {
  80. }
  81. })
  82. })
  83. z.ui.date("[name='TravelTimeDO[" + listsLength + "]$startTime']").init()
  84. z.ui.date("[name='TravelTimeDO[" + listsLength + "]$endTime']").init()
  85. buildQjsjSeq();
  86. lists.push(dataObj)
  87. })
  88. initPartners();
  89. $("#selectProject").click(function () {
  90. selectProject(null, setProject);
  91. })
  92. bindEvents();
  93. //根据返回的json对象渲染出差时间信息
  94. let tbodyQjsq = document.querySelector('.tbodyQjsq')
  95. let html = ""
  96. if (arrays.length > 0) {
  97. for (let i = 0; i < arrays.length; i++) {
  98. let startDate = moment(arrays[i].startTime).format('YYYY-MM-DD')
  99. let endDate = moment(arrays[i].endTime).format('YYYY-MM-DD')
  100. html += '<tr class="qjsjClass" id="qjsj_' + i + '" style="background:#fff; height: 63px;"> <td name="qjsj_seq">' + (i + 1) + '</td>'
  101. + '<td>'
  102. + '<div class="form-flex">'
  103. + '<div class="form-item" style="width: 50%;margin-right: 5px;">'
  104. + '<div class="z-comp-date" name="TravelTimeDO[' + i + ']$startTime">'
  105. + '<input type="text" value="' + startDate + '" title="' + startDate + '">'
  106. + '</div>'
  107. + '</div>'
  108. + '<div style="width: 50%;margin-left: 5px;" class="dateTimeRange startTimeRange' + (i) + '">'
  109. + '</div>'
  110. + '<span class="nbsp"> - </span>'
  111. + '</div>'
  112. + '</td>'
  113. + '<td>'
  114. + '<div class="form-flex">'
  115. + '<div class="form-item" style="width: 50%;margin-right: 5px;">'
  116. + '<div class="z-comp-date" name="TravelTimeDO[' + i + ']$endTime">'
  117. + '<input type="text" value="' + endDate + '" title="' + endDate + '">'
  118. + '</div>'
  119. + '</div>'
  120. + '<div style="width: 50%;margin-left: 5px;" class="dateTimeRange endTimeRange' + (i) + '">'
  121. + '</div>'
  122. + '</div>'
  123. + '</td>'
  124. + '<td>'
  125. + '<div class="form-item">'
  126. + '<div class="z-comp-input" name="TravelTimeDO[0]$bz1">'
  127. + '<input type="text" value="'+ arrays[i].bz1 +'" title="'+ arrays[i].bz1 +'">'
  128. + '</div>'
  129. + '</div>'
  130. + '</td>'
  131. + '<td>'
  132. + '<div style="display: flex;white-space: nowrap">'
  133. + '<div id="editBtn_' + (i) + '" style="margin: 0 10px" class="table-btn editBtn_' + (i) + '" data-index="' + (i) + '">'
  134. + '<span>编辑</span>'
  135. + '</div>'
  136. + '<div id="delBtn_' + (i) + '" style="margin: 0 10px" class="table-btn delBtn_' + (i) + '" data-index="' + (i) + '">'
  137. + '<span>删除</span>'
  138. + '</div>'
  139. + '</div>'
  140. + '</td></tr>';
  141. }
  142. tbodyQjsq.innerHTML = html
  143. for (let i = 0; i < arrays.length; i++) {
  144. timeSelector({
  145. ele: ".startTimeRange" + (i),
  146. name: "TravelTimeDO[" + (i) + "]$startTimeRange",
  147. callback: function (val) {
  148. }
  149. })
  150. timeSelector({
  151. ele: ".endTimeRange" + (i),
  152. name: "TravelTimeDO[" + (i) + "]$endTimeRange",
  153. callback: function (val) {
  154. }
  155. })
  156. z.ui.date("[name='TravelTimeDO[" + i + "]$startTime']").init()
  157. z.ui.date("[name='TravelTimeDO[" + i + "]$endTime']").init()
  158. $("#editBtn_" + i).click(function () {
  159. const span = $(this).find("span");
  160. const html = span.html();
  161. if (html === '编辑') {
  162. span.html('保存')
  163. detailWrite(i);
  164. addDataThat.attr('disabled', "true");
  165. $("#qjsj_" + i).removeClass("form-table-disable")
  166. return;
  167. }
  168. if (html === '保存') {
  169. span.html('编辑')
  170. detailReadonly(i, false)
  171. addDataThat.removeAttr('disabled')
  172. $("#qjsj_" + i).addClass("form-table-disable")
  173. return;
  174. }
  175. })
  176. $("#delBtn_" + i).click(function () {
  177. z.ui.confirm("compid").init({
  178. content: "确定删除吗?",
  179. onConfirm: function () {
  180. var element = document.getElementById("qjsj_" + i);
  181. element.remove();
  182. buildQjsjSeq();
  183. addDataThat.removeAttr('disabled')
  184. },
  185. onCancel: function () {
  186. }
  187. })
  188. })
  189. $("#qjsj_" + i).addClass("form-table-disable")
  190. if (viewState === 'v' || read === '1') {
  191. detailReadonly(i)
  192. }else {
  193. detailReadonly(i,false)
  194. }
  195. }
  196. let sTbody = document.querySelectorAll('.qjsjClass')
  197. for (let i = 0; i < arrays.length; i++) {
  198. let startHHmm = moment(arrays[i].startTime).format('HH:mm')
  199. let endHHmm = moment(arrays[i].endTime).format('HH:mm')
  200. sTbody[i].children[1].children[0].children[1].children[0].children[0].value = startHHmm
  201. sTbody[i].children[2].children[0].children[1].children[0].children[0].value = endHHmm
  202. sTbody[i].children[3].children[0].children[0].children[0].value = arrays[i].bz1 || ''
  203. }
  204. }
  205. }
  206. //注册业务保存事件
  207. function bindEvents() {
  208. z.workflow.saveBtn.addListener("onSaveClick", saveForm);
  209. }
  210. function buildQjsjSeq() {
  211. let elementsByName = document.getElementsByName("qjsj_seq");
  212. for (let i = 0; i < elementsByName.length; i++) {
  213. const seqElement = elementsByName[i];
  214. seqElement.innerHTML = i + 1;
  215. }
  216. }
  217. /*
  218. * all 工作流js传递到业务的参数 success执行的方法
  219. * istransfer 工作流js传递到业务的参数 是否转件
  220. * */
  221. function saveForm(all, istransfer) {
  222. var postData = z.ui.form.getFormFields($("[name=createReqVO]"));
  223. if (postData === false) {
  224. all({success: false});
  225. return;
  226. }
  227. postData.createReqVO.instanceId = z.ui.comm.getUrlParam("flowInstanceId");
  228. var travelTimeCreateList = new Array()
  229. for (let key of Object.keys(postData)) {
  230. let mealName = postData[key];
  231. if (key.startsWith("TravelTimeDO")) {
  232. mealName.startTime = Date.parse(mealName.startTime + " " + mealName.startTimeRange);
  233. mealName.endTime = Date.parse(mealName.endTime + " " + mealName.endTimeRange);
  234. travelTimeCreateList.push(z.ui.form.childStringify(mealName));
  235. }
  236. }
  237. postData.createReqVO.travelTimeCreateList = travelTimeCreateList;
  238. z.ui.ajax({
  239. type: "post",
  240. url: "/BusinessTravel/update",
  241. data: JSON.stringify(postData.createReqVO),
  242. contentType: "application/json",
  243. success: function () {
  244. all({success: true});
  245. },
  246. error: function () {
  247. all({success: false});
  248. }
  249. })
  250. }
  251. function generateTableTrHtml(index) {
  252. let timeObject = document.querySelector('#timeObject')
  253. let arrays = JSON.parse(timeObject.value)
  254. let indexC = 0
  255. if (arrays.length > 0) {
  256. indexC = arrays.length + index
  257. } else {
  258. indexC = index
  259. }
  260. var trDom = document.createElement("tr");
  261. trDom.style.backgroundColor = "#fff";
  262. trDom.id = "qjsj_" + indexC;
  263. trDom.style.height = "63px";
  264. trDom.innerHTML = '<td name="qjsj_seq">' + (indexC + 1) + '</td>'
  265. + '<td>'
  266. + '<div class="form-flex">'
  267. + '<div class="form-item" style="width: 50%;margin-right: 5px;">'
  268. + '<div class="z-comp-date" name="TravelTimeDO[' + indexC + ']$startTime">'
  269. + '<input type="text" value="">'
  270. + '</div>'
  271. + '</div>'
  272. + '<div style="width: 50%;margin-left: 5px;" class="dateTimeRange startTimeRange' + (indexC) + '">'
  273. + '</div>'
  274. + '<span class="nbsp"> - </span>'
  275. + '</div>'
  276. + '</td>'
  277. + '<td>'
  278. + '<div class="form-flex">'
  279. + '<div class="form-item" style="width: 50%;margin-right: 5px;">'
  280. + '<div class="z-comp-date" name="TravelTimeDO[' + indexC + ']$endTime">'
  281. + '<input type="text" value="">'
  282. + '</div>'
  283. + '</div>'
  284. + '<div style="width: 50%;margin-left: 5px;" class="dateTimeRange endTimeRange' + (indexC) + '">'
  285. + '</div>'
  286. + '</div>'
  287. + '</td>'
  288. + '<td>'
  289. + '<div class="form-item">'
  290. + '<div class="z-comp-input" name="TravelTimeDO[0]$bz1">'
  291. + '<input type="text" value="">'
  292. + '</div>'
  293. + '</div>'
  294. + '</td>'
  295. + '<td>'
  296. + '<div id="editBtn_' + (index) + '" class="table-btn editBtn_' + (indexC) + '" data-index="' + (indexC) + '">'
  297. + '<span>保存</span>'
  298. + '</div>'
  299. + '<div id="delBtn_' + (indexC) + '" class="table-btn delBtn_' + (indexC) + '" data-index="' + (indexC) + '">'
  300. + '<span>删除</span>'
  301. + '</div>'
  302. + '</td>';
  303. return trDom;
  304. }
  305. function initPartners() {
  306. z.ui.ajax({
  307. type: "get",
  308. url: "/common/user-tree",
  309. data: {},
  310. success: function (res) {
  311. if (res && res.length > 0) {
  312. selectMutiTree("[name='partners']", res, clickPartners)
  313. }
  314. if ($("[name='createReqVO$partners']").val()) {
  315. z.ui.selecttree("[name='partners']").setValue($("[name='createReqVO$partners']").val().split(","));
  316. }
  317. },
  318. error: function () {
  319. }
  320. })
  321. }
  322. function clickPartners(even, treeId, treeNode) {
  323. $("[name='createReqVO$partners']").val(z.ui.selecttree("[name='partners']").getValue());
  324. }
  325. function setProject(res) {
  326. if (res.data) {
  327. $("[name='createReqVO$projectId']").val(res.data.id);
  328. z.ui.input("[name='createReqVO$projectName']").setValue(res.data.xmmc);
  329. }
  330. }
  331. function detailReadonly(i, isBool = true) {
  332. if (isBool) {
  333. $("#delBtn_" + i).css("display", "none");
  334. $("#editBtn_" + i).css("display", "none");
  335. }
  336. let detailElement = document.getElementById("qjsj_" + i);
  337. let detailInput = detailElement.getElementsByTagName("input");
  338. for (let j = 0; j < detailInput.length; j++) {
  339. detailInput[j].disabled = true;
  340. detailInput[j].className += "z-readonly"
  341. }
  342. }
  343. function detailWrite(i) {
  344. let detailElement = document.getElementById("qjsj_" + i);
  345. let detailInput = detailElement.getElementsByTagName("input");
  346. for (let j = 0; j < detailInput.length; j++) {
  347. detailInput[j].disabled = false;
  348. $(detailInput[j]).removeClass("z-readonly")
  349. }
  350. }
  351. }());