apply.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691
  1. (function () {
  2. var lists = [];
  3. let flowInstanceId = "";
  4. let viewState = z.ui.comm.getUrlParam("_o");
  5. let isFirst = z.ui.comm.getUrlParam("first");
  6. var contractId = $("[name='contract$id']").val()
  7. var contractAmount = $("[name='contract$contractAmount'] input").val()
  8. window.onload = function () {
  9. flowInstanceId = z.ui.comm.getUrlParam("flowInstanceId");
  10. bindEvents();
  11. };
  12. function bindEvents() {
  13. initData();
  14. initCalcTax();
  15. initContractMilestone();
  16. initSelectMainType();
  17. bindGenerateSerial();
  18. bindCalcAttachAmount()
  19. z.workflow.saveBtn.addListener("onSaveClick", submit);
  20. }
  21. function initData(){
  22. initClient();
  23. initAssignee()
  24. initAreaManager();
  25. }
  26. function initSelectMainType() {
  27. z.ui.select("[name='contract$mainType']").bindEvents({
  28. onAfterSelect:function(value,data){
  29. if(value === '5' ){
  30. $("#attach").show();
  31. } else {
  32. $("#attach").hide();
  33. }
  34. }
  35. });
  36. var now = z.ui.select("[name='contract$mainType']").getValue();
  37. if (now ==='5'){
  38. $("#attach").show();
  39. } else {
  40. $("#attach").hide();
  41. }
  42. }
  43. function bindCalcAttachAmount(){
  44. $("[name='contract$attachRatio'] input").change(function(){
  45. if(!parseFloat($(this).val())){
  46. return;
  47. }
  48. var contractAmount = $("[name='contract$contractAmount'] input").val()
  49. var attachAmount =contractAmount - parseFloat($(this).val()) * contractAmount / 100;
  50. $("[name='contract$attachAmount'] input").val(attachAmount);
  51. })
  52. $("[name='contract$contractAmount'] input").change(function(){
  53. if(!parseFloat($(this).val())){
  54. return;
  55. }
  56. var attachRatio = $("[name='contract$attachRatio'] input").val()
  57. var attachAmount = $(this).val() - parseFloat($(this).val()) * attachRatio / 100;
  58. $("[name='contract$attachAmount'] input").val(attachAmount);
  59. })
  60. }
  61. function bindGenerateSerial(){
  62. $("#generateSerial").on("click",function(){
  63. var serial = $("[name='contract$contractNumber'] input").val();
  64. var projectTypeCode = $("[name=projectTypeCode]").val();
  65. var xzqh = $("[name=xzqh]").val();
  66. var params = {"projectType": projectTypeCode,"xzqh": xzqh};
  67. var postdata = {"name": '合同编号',"params": params}
  68. if(serial) {
  69. z.ui.confirm("confirm").init({
  70. content: '已有编号[' +serial + '],重新生成会覆盖原有编号,是否继续?',
  71. onConfirm: function() {
  72. z.ui.ajax({
  73. type: "post",
  74. contentType: "application/json",
  75. url: "/common/generate-serial-number",
  76. data: JSON.stringify(postdata),
  77. success: function (res) {
  78. if(res && res.code === 0){
  79. $("[name='contract$contractNumber'] input").val(res.data)
  80. } else {
  81. z.ui.alertWarning(res.msg);
  82. }
  83. },
  84. error: function (res) {
  85. }
  86. })
  87. },
  88. onCancel: function () {
  89. }
  90. })
  91. } else {
  92. z.ui.ajax({
  93. type: "post",
  94. contentType: "application/json",
  95. url: "/common/generate-serial-number",
  96. data: JSON.stringify(postdata),
  97. success: function (res) {
  98. if(res && res.code === 0){
  99. $("[name='contract$contractNumber'] input").val(res.data)
  100. } else {
  101. z.ui.alertWarning(res.msg);
  102. }
  103. },
  104. error: function (res) {
  105. }
  106. })
  107. }
  108. })
  109. }
  110. function initClient(){
  111. z.ui.ajax({
  112. type: "get",
  113. url: "/customer-tree",
  114. data: {},
  115. success: function (res) {
  116. if(res && res.code === 0 && res.data.length > 0){
  117. selecttree("[name='client']",res.data,clickClient)
  118. }
  119. },
  120. error: function () {
  121. }
  122. })
  123. }
  124. function initAssignee(){
  125. z.ui.ajax({
  126. type: "get",
  127. url: "/common/company-tree",
  128. data: {},
  129. success: function (res) {
  130. if(res && res.code === 0 && res.data.length > 0){
  131. selecttree("[name='assignee']",res.data,clickAssignee)
  132. }
  133. },
  134. error: function () {
  135. }
  136. })
  137. }
  138. function initCalcTax(){
  139. $('[name="contract$taxHsjeJskf"] input').on('change',function (){
  140. calcTax();
  141. })
  142. $('[name="contract$taxHsjeFw"] input').on('change',function (){
  143. calcTax();
  144. })
  145. $('[name="contract$taxHsjeRjcp"] input').on('change',function (){
  146. calcTax();
  147. })
  148. $('[name="contract$taxHsjeYj"] input').on('change',function (){
  149. calcTax();
  150. })
  151. }
  152. function initContractMilestone(){
  153. var milestoneList = JSON.parse(window.milestoneList);
  154. if (milestoneList.length > 0) {
  155. for (let i = 0; i < milestoneList.length; i++) {
  156. let obj = {
  157. name: milestoneList[i].name || "",
  158. returnAmount: milestoneList[i].returnAmount || "",
  159. actualReturnAmount: milestoneList[i].actualReturnAmount || "",
  160. planReturnTime: milestoneList[i].planReturnTime || "",
  161. description: milestoneList[i].description || "",
  162. id: milestoneList[i].id || "",
  163. contractId: milestoneList[i].contractId || contractId,
  164. sortnum: milestoneList[i].sortnum || ""
  165. }
  166. lists.push(obj)
  167. }
  168. }
  169. $("#addData").click(function(){
  170. addContractMilestone();
  171. })
  172. updateView()
  173. }
  174. function submit(all, istransfer) {
  175. var postData = z.ui.form.getFormFields("[name=flow-form]", {validatorRequired: istransfer});
  176. if (postData === false) {
  177. all({success: false});
  178. return;
  179. }
  180. var milestoneFlag = false;
  181. var milestoneList = new Array()
  182. for (let key of Object.keys(postData)) {
  183. let mealName = postData[key];
  184. if (key.startsWith("ContractMilestone")) {
  185. if(parseFloat(mealName.actualReturnAmount) && parseFloat(mealName.actualReturnAmount) > 0 ){
  186. all({success: false, errorMsg: "里程碑回款金额不能大于0!"});
  187. return;
  188. }
  189. mealName.contractId = contractId;
  190. milestoneList.push(z.ui.form.childStringify(mealName));
  191. milestoneFlag =true;
  192. }
  193. }
  194. var mType = z.ui.select("[name='contract$mainType']").getValue();
  195. if (mType ==='5'){
  196. var attachRatio = $("[name='contract$attachRatio'] input").val();
  197. if(!attachRatio){
  198. all({success: false, errorMsg: "请填写挂靠比例!"});
  199. }
  200. }
  201. if(istransfer && !milestoneFlag){
  202. all({success: false, errorMsg: "请填写合同里程碑!"});
  203. return;
  204. }
  205. postData.milestoneList = milestoneList;
  206. z.ui.ajax({
  207. url: z.ui.comm.getEntranceUrl("/flow/contract/update"),
  208. data: z.ui.form.childStringify(postData),
  209. success: function (res) {
  210. if(res.data.code==999){
  211. all({success: false, errorMsg: res.data.msg});
  212. }else{
  213. all({ success: true });
  214. }
  215. },
  216. error: function () {
  217. all({success: false});
  218. }
  219. })
  220. }
  221. function calcTax() {
  222. var hsje_jskf = parseFloat($('[name="contract$taxHsjeJskf"] input').val()) || 0;
  223. var hsje_fw = parseFloat($('[name="contract$taxHsjeFw"] input').val()) || 0;
  224. var hsje_rjcp = parseFloat($('[name="contract$taxHsjeRjcp"] input').val()) || 0;
  225. var hsje_yj = parseFloat($('[name="contract$taxHsjeYj"] input').val()) || 0;
  226. var hsje_total = parseFloat((hsje_jskf + hsje_fw + hsje_rjcp + hsje_yj).toFixed(2));
  227. $('[name="contract$taxHsjeTotal"] input').val(hsje_total);
  228. var bhsje_jskf = parseFloat(hsje_jskf.toFixed(2));
  229. var bhsje_fw = parseFloat((hsje_fw / (1 + 0.06)).toFixed(2));
  230. var bhsje_rjcp = parseFloat((hsje_rjcp / (1 + 0.13)).toFixed(2));
  231. var bhsje_yj =parseFloat( (hsje_yj / (1 + 0.13)).toFixed(2));
  232. var bhsje_total = parseFloat((bhsje_jskf + bhsje_fw + bhsje_rjcp + bhsje_yj).toFixed(2));
  233. $('[name="contract$taxBhsze"] input').val(bhsje_total);
  234. $('[name="contract$taxZhsl"] input').val(((hsje_total - bhsje_total) / bhsje_total).toFixed(6));
  235. var zhsl = 0;
  236. var htje = parseFloat($('[name="contract$contractAmount"] input').val()) || 0;
  237. if (htje == 0){
  238. zhsl = 1;
  239. } else {
  240. zhsl = (1 - parseFloat(bhsje_total / htje)).toFixed(2);
  241. }
  242. }
  243. function initAreaManager(){
  244. z.ui.ajax({
  245. type: "get",
  246. url: "/common/user-tree",
  247. data: {},
  248. success: function (res) {
  249. if(res && res.length > 0){
  250. // selecttree("[name='areaManager']",res,onClear,clickAreaManager,setAreaManager,allowUserClick,{ "Y": "s", "N": "s" })
  251. selecttree("[name='areaManager']",res,clickAreaManager,allowUserClick,onClear,setAreaManager)
  252. selecttree("[name='areaDirector']",res,clickAreaDirector,allowUserClick,onAreaDirectorClear,setAreaDirector)
  253. }
  254. },
  255. error: function () {
  256. }
  257. })
  258. }
  259. function onClear(){
  260. $("[name='contract$areaManagerId']").val('');
  261. $("[name='contract$areaManager']").val('');
  262. }
  263. function onAreaDirectorClear(){
  264. $("[name='contract$areaDirectorId']").val('');
  265. $("[name='contract$areaDirector']").val('');
  266. }
  267. function setAreaManager(){
  268. var ids = $("[name='contract$areaManagerId']").val();
  269. if(ids){
  270. z.ui.selecttree("[name='areaManager']").setValue(ids.split(","));
  271. }
  272. }
  273. function setAreaDirector(){
  274. var ids = $("[name='contract$areaDirectorId']").val();
  275. if(ids){
  276. z.ui.selecttree("[name='areaDirector']").setValue(ids.split(","));
  277. }
  278. }
  279. // function clickAreaManager(even, treeId, treeNode) {
  280. // var ids = [];
  281. // var names = [];
  282. // var nodes = z.ui.selecttree("[name='areaManager']").tree.getCheckedNodes();
  283. // for(var i in nodes){
  284. // ids.push(nodes[i].id);
  285. // names.push(nodes[i].name);
  286. // }
  287. // if(ids.length > 0){
  288. // $("[name='contract$areaManagerId']").val(ids.join(","));
  289. // $("[name='contract$areaManager']").val(names.join(","));
  290. // }
  291. // }
  292. function clickAreaDirector(even, treeId, treeNode) {
  293. $("[name='contract$areaDirectorId']").val(treeNode.id);
  294. $("[name='contract$areaDirector']").val(treeNode.name);
  295. }
  296. function clickAreaManager(even, treeId, treeNode) {
  297. $("[name='contract$areaManagerId']").val(treeNode.id);
  298. $("[name='contract$areaManager']").val(treeNode.name);
  299. }
  300. function clickClient(even, treeId, treeNode) {
  301. $("[name='contract$clientName']").val(treeNode.name);
  302. $("[name='contract$clientId']").val(treeNode.id);
  303. $("[name='contract$clientNumber'] input").val(treeNode.extendData.customerNumber);
  304. }
  305. function clickAssignee(even, treeId, treeNode) {
  306. $("[name='contract$assigneeName']").val(treeNode.name);
  307. $("[name='contract$assigneeId']").val(treeNode.id);
  308. }
  309. function updateList(){
  310. lists = [];
  311. var postData = z.ui.form.getFormFields("[name=flow-form]", {validatorRequired: false});
  312. for (let key of Object.keys(postData)) {
  313. let mealName = postData[key];
  314. if (key.startsWith("ContractMilestone")) {
  315. var dataObj = {
  316. name: mealName.name,
  317. returnAmount: mealName.returnAmount,
  318. actualReturnAmount: mealName.actualReturnAmount,
  319. planReturnTime: mealName.planReturnTime,
  320. description: mealName.description,
  321. id: mealName.id,
  322. contractId: contractId,
  323. sortnum: lists.length
  324. }
  325. lists.push(dataObj);
  326. }
  327. }
  328. }
  329. function addContractMilestone(){
  330. var trFragment = document.createDocumentFragment();
  331. let tbody = document.querySelectorAll('.tbody tr')
  332. let qjsjElements = document.getElementsByName("contract_milestone_seq");
  333. var dataObj = {
  334. name: "",
  335. returnAmount: "",
  336. actualReturnAmount: 0,
  337. planReturnTime: "",
  338. description: "",
  339. id: "",
  340. contractId: contractId,
  341. sortnum: lists.length - 1
  342. }
  343. lists.push(dataObj);
  344. trFragment.appendChild(generateTableTrHtml(lists.length-1))
  345. var index = lists.length - 1;
  346. $(".tbody").append(trFragment)
  347. $("#delBtn_" + index).click(function () {
  348. var i = this.id.substring(this.id.indexOf("_") + 1)
  349. z.ui.confirm("compid").init({
  350. content: "确定删除吗?",
  351. onConfirm: function () {
  352. var element = document.getElementById("contract_milestone_" + i);
  353. element.remove();
  354. buildSeq();
  355. updateList();
  356. //lists.splice(i,1);
  357. updateView();
  358. },
  359. onCancel: function () {
  360. }
  361. })
  362. })
  363. $("#editBtn_" + index).click(function () {
  364. var i = this.id.substring(this.id.indexOf("_") + 1)
  365. const span = $(this).find("span");
  366. const html = span.html();
  367. if (html === '编辑') {
  368. span.html('保存')
  369. detailWrite(i);
  370. $("#addData").attr('disabled', "true");
  371. $("#contract_milestone_" + i).removeClass("form-table-disable")
  372. return;
  373. }
  374. if (html === '保存') {
  375. span.html('编辑')
  376. detailReadonly(i, false,"contract_milestone_")
  377. $("#addData").removeAttr('disabled')
  378. $("#contract_milestone_" + i).addClass("form-table-disable")
  379. return;
  380. }
  381. })
  382. z.ui.date("[name='ContractMilestone[" + (lists.length-1) + "]$planReturnTime']").init()
  383. buildSeq();
  384. for (let i = 0; i < tbody.length; i++) {
  385. z.ui.date("[name='ContractMilestone[" + i + "]$planReturnTime']").init({
  386. done: function (value, date, endDate) {
  387. //改变日期后触发
  388. console.log(value);
  389. }
  390. });
  391. }
  392. }
  393. function buildSeq() {
  394. let elementsByName = document.getElementsByName("contract_milestone_seq");
  395. for (let i = 0; i < elementsByName.length; i++) {
  396. const seqElement = elementsByName[i];
  397. seqElement.innerHTML = i + 1;
  398. }
  399. }
  400. function updateView() {
  401. let tbodyQjsq = document.querySelector('.tbodyQjsq')
  402. let html = ''
  403. for (let i = 0; i < lists.length; i++) {
  404. var ratio = '';
  405. if(parseFloat(contractAmount) && parseFloat(contractAmount) > 0 ){
  406. ratio = ((lists[i].returnAmount / parseFloat(contractAmount)) * 100).toFixed(2) + '%';
  407. }
  408. html += '<tr class="qjsjClass" id="contract_milestone_' + i + '" style="background:#fff">'
  409. + '<td name="contract_milestone_seq">' + (i + 1) + '</td>'
  410. + '<td>'
  411. + '<div class="form-flex">'
  412. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  413. + '<input type="hidden" name="ContractMilestone[' + i + ']$id" value="'+lists[i].id+'"/>'
  414. + '<input type="hidden" name="ContractMilestone[' + i + ']$sortnum" value="'+lists[i].sortnum+'"/>'
  415. + '<div class="z-comp-input" name="ContractMilestone[' + i + ']$name">'
  416. + '<input type="text" value="'+lists[i].name+'">'
  417. + '</div>'
  418. + '</div>'
  419. + '</div>'
  420. + '</td>'
  421. + '<td>'
  422. + '<div class="form-flex">'
  423. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  424. + '<div class="z-comp-input">'
  425. + '<input type="text" value="'+ratio+'">'
  426. + '</div>'
  427. + '</div>'
  428. + '</div>'
  429. + '</td>'
  430. + '<td>'
  431. + '<div class="form-flex">'
  432. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  433. + '<div class="z-comp-input" name="ContractMilestone[' + i + ']$returnAmount">'
  434. + '<input type="text" value="'+lists[i].returnAmount+'">'
  435. + '</div>'
  436. + '</div>'
  437. + '</div>'
  438. + '</td>'
  439. + '<td>'
  440. + '<div class="form-flex">'
  441. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  442. + '<div class="z-comp-input" name="ContractMilestone[' + i + ']$actualReturnAmount">'
  443. + '<input type="text" value="'+lists[i].actualReturnAmount+'">'
  444. + '</div>'
  445. + '</div>'
  446. + '</div>'
  447. + '</td>'
  448. + '<td>'
  449. + '<div class="form-flex">'
  450. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  451. + '<div class="z-comp-date" name="ContractMilestone[' + i + ']$planReturnTime">'
  452. + '<input type="text" value="'+lists[i].planReturnTime+'">'
  453. + '</div>'
  454. + '</div>'
  455. + '</div>'
  456. + '</td>'
  457. + '<td>'
  458. + '<div class="form-flex">'
  459. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  460. + '<div class="z-comp-input" name="ContractMilestone[' + i + ']$description">'
  461. + '<input type="text" value="'+lists[i].description+'">'
  462. + '</div>'
  463. + '</div>'
  464. + '</div>'
  465. + '</td>'
  466. + '<td>'
  467. if(isFirst === '1' && viewState !== 'v') {
  468. html += "<div style='display: flex;white-space: nowrap'>"
  469. +'<div id="editBtn_' + (i) + '" class="table-btn editBtn_' + (i) + '" data-index="' + (i) + '">'
  470. + '<span>编辑</span>'
  471. + '</div>'
  472. + '<div id="delBtn_' + (i) + '" class="table-btn delBtn_' + (i) + '" data-index="' + (i) + '">'
  473. + '<span>删除</span>'
  474. + '</div></div>'
  475. }
  476. html += '</td></tr>';
  477. }
  478. tbodyQjsq.innerHTML = html
  479. for (let i = 0; i < lists.length; i++) {
  480. z.ui.date("[name='ContractMilestone[" + i + "]$planReturnTime']").init()
  481. if(isFirst === '1' && viewState !== 'v') {
  482. $("#delBtn_" + i).click(function () {
  483. z.ui.confirm("compid").init({
  484. content: "确定删除吗?",
  485. onConfirm: function () {
  486. var element = document.getElementById("contract_milestone_" + i);
  487. element.remove();
  488. buildSeq();
  489. updateList();
  490. //lists.splice(i, 1)
  491. updateView();
  492. },
  493. onCancel: function () {
  494. }
  495. })
  496. })
  497. $("#editBtn_" + i).click(function () {
  498. const span = $(this).find("span");
  499. const html = span.html();
  500. if (html === '编辑') {
  501. span.html('保存')
  502. detailWrite(i);
  503. $("#addData").attr('disabled', "true");
  504. $("#contract_milestone_" + i).removeClass("form-table-disable")
  505. return;
  506. }
  507. if (html === '保存') {
  508. span.html('编辑')
  509. detailReadonly(i, false, "contract_milestone_")
  510. $("#addData").removeAttr('disabled')
  511. $("#contract_milestone_" + i).addClass("form-table-disable")
  512. return;
  513. }
  514. })
  515. }
  516. detailReadonly(i,false,"contract_milestone_")
  517. $("#contract_milestone_" + i).addClass("form-table-disable")
  518. // if(viewState === 'v' || read=== '1'){
  519. // detailReadonly(i)
  520. // }
  521. }
  522. // detailTotalInit()
  523. }
  524. function generateTableTrHtml(index) {
  525. var trDom = document.createElement("tr");
  526. trDom.style.backgroundColor = "#fff";
  527. trDom.id = "contract_milestone_" + index;
  528. trDom.className = 'qjsjClass';
  529. trDom.innerHTML = '<td name="contract_milestone_seq">' + (index + 1) + '</td>'
  530. + '<td>'
  531. + '<div class="form-flex">'
  532. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  533. + '<input type="hidden" name="ContractMilestone[' + index + ']$sortnum" value="'+(index+1)+'">'
  534. + '<div class="z-comp-input" name="ContractMilestone[' + index + ']$name">'
  535. + '<input type="text" value="">'
  536. + '</div>'
  537. + '</div>'
  538. + '</div>'
  539. + '</td>'
  540. + '<td>'
  541. + '<div class="form-flex">'
  542. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  543. + '<div class="z-comp-input">'
  544. + '<input type="text" value="">'
  545. + '</div>'
  546. + '</div>'
  547. + '</div>'
  548. + '</td>'
  549. + '<td>'
  550. + '<div class="form-flex">'
  551. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  552. + '<div class="z-comp-input" name="ContractMilestone[' + index + ']$returnAmount">'
  553. + '<input type="text" value="">'
  554. + '</div>'
  555. + '</div>'
  556. + '</div>'
  557. + '</td>'
  558. + '<td>'
  559. + '<div class="form-flex">'
  560. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  561. + '<div class="z-comp-input" name="ContractMilestone[' + index + ']$actualReturnAmount">'
  562. + '<input type="text" value="'+lists[index].actualReturnAmount+'">'
  563. + '</div>'
  564. + '</div>'
  565. + '</div>'
  566. + '</td>'
  567. + '<td>'
  568. + '<div class="form-flex">'
  569. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  570. + '<div class="z-comp-date" name="ContractMilestone[' + index + ']$planReturnTime">'
  571. + '<input type="text" value="">'
  572. + '</div>'
  573. + '</div>'
  574. + '</div>'
  575. + '</td>'
  576. + '<td>'
  577. + '<div class="form-flex">'
  578. + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
  579. + '<div class="z-comp-input" name="ContractMilestone[' + index + ']$description">'
  580. + '<input type="text" value="">'
  581. + '</div>'
  582. + '</div>'
  583. + '</div>'
  584. + '</td>'
  585. + '<td>'
  586. + '<div style="display: flex;white-space: nowrap">'
  587. + '<div id="editBtn_' + (index) + '" class="table-btn editBtn_' + (index) + '" data-index="' + (index) + '">'
  588. + '<span>保存</span>'
  589. + '</div>'
  590. + '<div id="delBtn_' + (index) + '" class="table-btn delBtn_' + (index) + '" data-index="' + (index) + '">'
  591. + '<span>删除</span>'
  592. + '</div></div>'
  593. + '</td>';
  594. return trDom;
  595. }
  596. function detailReadonly(i, isBool = true,prefix) {
  597. if (isBool) {
  598. $("#delBtn_" + i).css("display", "none");
  599. $("#editBtn_" + i).css("display", "none");
  600. }
  601. let detailElement = document.getElementById(prefix + i);
  602. let detailInput = detailElement.getElementsByTagName("input");
  603. for (let j = 0; j < detailInput.length; j++) {
  604. detailInput[j].disabled = true;
  605. detailInput[j].className += "z-readonly"
  606. }
  607. }
  608. function detailWrite(i) {
  609. //财务审核时可以核减修改金额
  610. let detailElement = document.getElementById("contract_milestone_" + i);
  611. let detailInput = detailElement.getElementsByTagName("input");
  612. for (let j = 0; j < detailInput.length; j++) {
  613. detailInput[j].disabled = false;
  614. $(detailInput[j]).removeClass("z-readonly")
  615. }
  616. }
  617. // TODO tax valid
  618. // function Tax_ValidateInput() {
  619. // var flag = true;
  620. // var htje = Number(jPage.find('[name="CONTRACT0000HTJE"]').val()) || 0;
  621. // var hsje_total = Number(jPage.find('[name="CONTRACT0000TAX_HSJE_TOTAL"]').val()) || 0;
  622. // if (hsje_total != htje) {
  623. // W.Page.ShowError('含税金额(小计)与合同金额不一致!');
  624. // flag = false;
  625. // }
  626. //
  627. // var hsje_rjcp = parseFloat(jPage.find('[name="CONTRACT0000TAX_HSJE_RJCP"]').val()) || 0;
  628. // var tax_softpatent = jPage.find('[name="CONTRACT0000TAX_SOFTPATENT"]').val();
  629. // if (hsje_rjcp > 0 && !tax_softpatent) {
  630. // W.Page.ShowError('请选择一个具体的软件产品名称!');
  631. // flag = false;
  632. // }
  633. // if (hsje_rjcp == 0 && tax_softpatent)
  634. // jPage.find('[name="CONTRACT0000TAX_SOFTPATENT"]').val('');
  635. //
  636. // return flag;
  637. // }
  638. }())