devops.ui.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. window.setCustomField = function(obj)
  2. {
  3. const changeField = typeof obj == 'string' ? obj : $(obj).attr('name');
  4. if(dependFields && dependFields[changeField])
  5. {
  6. dependFields[changeField].forEach((field) => {
  7. window.checkDepends(field);
  8. window.setCustomField(field);
  9. });
  10. }
  11. if(!$('#customFieldsTable').length) return;
  12. $('#customFieldsTable .custom-btn').addClass('disabled').attr('type', 'button');
  13. if(typeof customFields === 'undefined' || !customFields) return;
  14. for(let name in customFields)
  15. {
  16. if($(`#${name}`).closest('tr').hasClass('hidden')) continue;
  17. const value = getCustomValue(customFields[name].type, name, customFields[name].separator);
  18. if(value != customFields[name].value)
  19. {
  20. $('#customFieldsTable .custom-btn').removeClass('disabled').attr('type', 'submit');
  21. return;
  22. }
  23. }
  24. };
  25. window.getCustomValue = function(type, name, split = ',')
  26. {
  27. if($(`.${name}-row-tr`).hasClass('hidden')) return '';
  28. let value = '';
  29. switch(type)
  30. {
  31. case 'radioList':
  32. value = $('input[name=' + name + ']:checked').val();
  33. break;
  34. case 'checkList':
  35. value = $('input[name^=' + name + ']:checked').map(function() { return $(this).val(); }).get();
  36. break;
  37. case 'picker':
  38. value = $('input[name=' + name + ']').val();
  39. break;
  40. case 'switcher':
  41. value = $('input[name=' + name + ']').is(':checked');
  42. break;
  43. default:
  44. value = $('input[name=' + name + ']').val();
  45. break;
  46. }
  47. if(Array.isArray(value)) value = value.join(split);
  48. return value;
  49. };
  50. window.checkDepends = function(fieldName)
  51. {
  52. if(typeof customFields === 'undefined' || !customFields) return;
  53. if(typeof fieldName === 'object') fieldName = fieldName.name;
  54. const field = customFields[fieldName];
  55. if(!field || !field.depends || !field.depends.length) return;
  56. let canShow = true;
  57. field.depends.forEach(function(depend)
  58. {
  59. if(customFields[depend.key])
  60. {
  61. const dependField = customFields[depend.key];
  62. const value = getCustomValue(dependField.type, dependField.name);
  63. if(depend.operator == 'eq' && value != depend.value) canShow = false;
  64. if(depend.operator == 'ne' && value == depend.value) canShow = false;
  65. if(depend.operator == 'lt' && value >= depend.value) canShow = false;
  66. if(depend.operator == 'gt' && value <= depend.value) canShow = false;
  67. if(depend.operator == 'in' && !value.split(',').includes(depend.value)) canShow = false;
  68. }
  69. });
  70. $(`.${field.name}-row-tr`).toggleClass('hidden', !canShow);
  71. };
  72. $(function()
  73. {
  74. setTimeout(function()
  75. {
  76. if(typeof customFields === 'undefined' || !customFields) return;
  77. for(let name in customFields) window.setCustomField(name);
  78. }, 100);
  79. });