zentaomax.ui.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. /**
  2. * 初始化交付物表单内容。
  3. * Render deliverable form data.
  4. */
  5. window.renderRowData = function($row, index, row)
  6. {
  7. index = index + 1;
  8. $.each(['whenClosed'], function(i, value)
  9. {
  10. if(row)
  11. {
  12. $row.find('[data-name=' + value + ']').empty();
  13. if(value == 'whenClosed' || row.key == 'project_scrum' || row.key == 'product_scrum' || row.key == 'product_waterfall' || row.key == 'project_waterfall')
  14. {
  15. if(row[value])
  16. {
  17. $.each(row[value], function(key, itemObject)
  18. {
  19. itemHTML = "<div class='item flex items-center pb-2'><div class='w-52' id='deliverable" + index + value + key + "'></div><label class='form-label' for='requiredBox'><div class='checkbox-primary'><input type='checkbox' id='required" + index + value + key + "' name='required[" + index + "][" + value + "][" + key + "]' " + (itemObject.required ? 'checked=checked' : '') + "><label for='required" + index + value + key + "'>" + requiredLabel + "</label></div></label><button type='button' class='form-batch-btn btn square ghost size-sm ml-1' data-on='click' data-call='addNode' data-params='event'><i class='icon icon-plus'></i></button><button type='button' class='form-batch-btn btn square ghost size-sm " + (row[value].length <= 1 ? 'opacity-0 cursor-default' : '') + "' data-type='remove' data-on='click' data-call='removeNode' data-params='event'><i class='icon icon-trash'></i></button></div>";
  20. $row.find('[data-name=' + value + ']').append("<div class='deliverable col items-center' data-index='" + index + "' data-value='" + value + "' data-key='" + row[value].length + "' data-model='" + row.key + "'>" + itemHTML + '</div>');
  21. new zui.Picker('#deliverable' + index + value + key, {items: [deliverables[itemObject.deliverable]], name: 'deliverable[' + index + ']['+ value +'][' + key + ']', defaultValue: itemObject.deliverable});
  22. });
  23. }
  24. else
  25. {
  26. itemHTML = '';
  27. itemHTML += "<div class='item flex items-center pb-2'><div class='w-52' id='deliverable" + index + value + "0'></div><label class='form-label' for='requiredBox'><div class='checkbox-primary'><input type='checkbox' id='required" + index + value + "0' name='required[" + index + "][" + value + "][0]' checked=checked><label for='required" + index + value + "0'>" + requiredLabel + "</label></div></label><button type='button' class='form-batch-btn btn square ghost size-sm ml-1' data-on='click' data-call='addNode' data-params='event'><i class='icon icon-plus'></i></button><button type='button' class='form-batch-btn btn square ghost size-sm' data-type='remove' data-on='click' data-call='removeNode' data-params='event'><i class='icon icon-trash'></i></button></div>";
  28. itemHTML += "<div class='item flex items-center pb-2'><div class='w-52' id='deliverable" + index + value + "1'></div><label class='form-label' for='requiredBox'><div class='checkbox-primary'><input type='checkbox' id='required" + index + value + "1' name='required[" + index + "][" + value + "][1]' checked=checked><label for='required" + index + value + "1'>" + requiredLabel + "</label></div></label><button type='button' class='form-batch-btn btn square ghost size-sm ml-1' data-on='click' data-call='addNode' data-params='event'><i class='icon icon-plus'></i></button><button type='button' class='form-batch-btn btn square ghost size-sm' data-type='remove' data-on='click' data-call='removeNode' data-params='event'><i class='icon icon-trash'></i></button></div>";
  29. $row.find('[data-name=' + value + ']').append("<div class='deliverable col items-center' data-index='" + index + "' data-value='" + value + "' data-key='2' data-model='" + row.key + "'>" + itemHTML + '</div>');
  30. new zui.Picker('#deliverable' + index + value + '0', {items: [], name: 'deliverable[' + index + ']['+ value +'][0]', defaultValue: ''});
  31. new zui.Picker('#deliverable' + index + value + '1', {items: [], name: 'deliverable[' + index + ']['+ value +'][1]', defaultValue: ''});
  32. }
  33. }
  34. else
  35. {
  36. $row.find('[data-name=' + value + ']').append('<div>' + sprintTips + '</div>');
  37. }
  38. }
  39. });
  40. }
  41. /**
  42. * 获取交付物下拉列表。
  43. * Get deliverable list.
  44. */
  45. window.getDeliverables = function(event)
  46. {
  47. const method = $(event.target).closest('div.deliverable').data('value');
  48. const model = $(event.target).closest('div.deliverable').data('model');
  49. const $picker = $(event.target).zui('picker');
  50. const link = $.createLink('workflowgroup', 'ajaxGetDeliverable', 'model=' + model + '&method=' + method + '&current=' + $picker.$.state.value);
  51. const formData = getFormData();
  52. $.post(link, formData, function(relations)
  53. {
  54. relations = JSON.parse(relations);
  55. $picker.render({items: relations});
  56. });
  57. }
  58. /**
  59. * 获取表单提交内容。
  60. * Get Form data.
  61. */
  62. window.getFormData = function()
  63. {
  64. const form = document.querySelector('form');
  65. const formData = {};
  66. for(let element of form.elements)
  67. {
  68. if(element.name) formData[element.name] = element.value;
  69. }
  70. return formData;
  71. }
  72. /**
  73. * 添加一行交付物节点。
  74. * Add a node.
  75. */
  76. window.addNode = function(event)
  77. {
  78. const $row = $(event.target).closest('td');
  79. const key = $(event.target).closest('div.deliverable').data('key');
  80. const index = $(event.target).closest('div.deliverable').data('index');
  81. const value = $(event.target).closest('div.deliverable').data('value');
  82. html = "<div class='item flex items-center pb-2' data-index=" + index + " data-value=" + value + "><div class='w-52' id='deliverable" + index + value + key + "'></div><label class='form-label' for='requiredBox'><div class='checkbox-primary'><input type='checkbox' id='required" + index + value + key + "' name='required[" + index + "][" + value + "][" + key + "]' checked=checked><label for='required" + index + value + key + "'>" + requiredLabel + "</label></div></label><button type='button' class='form-batch-btn btn square ghost size-sm ml-1' data-on='click' data-call='addNode' data-params='event'><i class='icon icon-plus'></i></button><button type='button' class='form-batch-btn btn square ghost size-sm' data-type='remove' data-on='click' data-call='removeNode' data-params='event'><i class='icon icon-trash'></i></button></div>";
  83. $(event.target).closest('div').after(html);
  84. $(event.target).closest('div.deliverable').attr('data-key', key + 1);
  85. new zui.Picker('#deliverable' + index + value + key, {items: [], name: 'deliverable[' + index + '][' + value + '][' + key + ']', defaultValue: ''});
  86. checkBtn($row);
  87. }
  88. /**
  89. * 删除一行交付物节点。
  90. * Remove a node.
  91. */
  92. window.removeNode = function(event)
  93. {
  94. if($(event.target).closest('button').hasClass('opacity-0')) return false;
  95. $row = $(event.target).closest('td');
  96. $(event.target).closest('div').remove();
  97. checkBtn($row);
  98. }
  99. /**
  100. * 检查删除交付物按钮是否可以点击。
  101. * check delete btn.
  102. */
  103. window.checkBtn = function(row)
  104. {
  105. if($(row).find('div.flex').length >= 2)
  106. {
  107. $(row).find('.form-batch-btn[data-type=remove]').removeClass('opacity-0 cursor-default');
  108. }
  109. else
  110. {
  111. $(row).find('.form-batch-btn[data-type=remove]').addClass('opacity-0 cursor-default');
  112. }
  113. }