showimport.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. $(function()
  2. {
  3. $('[name^=control]').change(function()
  4. {
  5. var $tr = $(this).parents('tr');
  6. var $type = $tr.find('[name^=type]');
  7. var $length = $tr.find('[name^=length]');
  8. var $integerDigits = $tr.find('[name^=integerDigits]');
  9. var $decimalDigits = $tr.find('[name^=decimalDigits]');
  10. var $optionType = $tr.find('[name^=optionType]');
  11. var $default = $tr.find('[name^=default]');
  12. var type = window.defaultField.type;
  13. var optionClass = window.defaultField.optionClass;
  14. var control = $(this).val();
  15. var length = $length.val();
  16. var integerDigits = $integerDigits.val();
  17. var decimalDigits = $decimalDigits.val();
  18. var optionType = $optionType.val();
  19. var isOptionControl = (control == 'select' || control == 'multi-select' || control == 'radio' || control == 'checkbox');
  20. if(!length) length = window.defaultField.varcharLength;
  21. if(!integerDigits) integerDigits = window.defaultField.integerDigits;
  22. if(!decimalDigits) decimalDigits = window.defaultField.decimalDigits;
  23. switch(control)
  24. {
  25. case 'formula' :
  26. case 'decimal' :
  27. type = 'decimal';
  28. optionClass = 'decimal';
  29. length = '';
  30. break;
  31. case 'integer' :
  32. type = 'int';
  33. optionClass = 'integer';
  34. length = '';
  35. break;
  36. case 'multi-select' :
  37. case 'checkbox' :
  38. case 'textarea' :
  39. case 'richtext' :
  40. type = 'text';
  41. optionClass = 'text';
  42. length = '';
  43. break;
  44. case 'date' :
  45. type = 'date';
  46. optionClass = 'date';
  47. length = '';
  48. break;
  49. case 'datetime' :
  50. type = 'datetime';
  51. optionClass = 'time';
  52. length = '';
  53. break;
  54. }
  55. $length.val(length);
  56. $integerDigits.val(integerDigits);
  57. $decimalDigits.val(decimalDigits);
  58. $type.val(type).change().find('option').show().not('.' + optionClass).hide();
  59. if(isOptionControl)
  60. {
  61. $optionType.val(optionType).change().removeAttr('disabled').trigger('chosen:updated');
  62. }
  63. else
  64. {
  65. $optionType.val('').change().attr('disabled', 'disabled').trigger('chosen:updated');
  66. }
  67. });
  68. $('[name^=type]').change(function()
  69. {
  70. var $tr = $(this).parents('tr');
  71. var type = $(this).val();
  72. if(type == 'char') $tr.find('[name^=length]').attr({'placeholder' : window.placeholder.charLength, 'title' : window.placeholder.charLength, 'max' : window.maxField.charLength});
  73. if(type == 'varchar') $tr.find('[name^=length]').attr({'placeholder' : window.placeholder.varcharLength, 'title' : window.placeholder.varcharLength, 'max' : window.maxField.varcharLength});
  74. $tr.find('.length').toggle(type == 'char' || type == 'varchar');
  75. $tr.find('.digits').toggle(type == 'decimal');
  76. setDefault($tr);
  77. });
  78. $('[name^=length], [name^=integerDigits], [name^=decimalDigits]').change(function()
  79. {
  80. setDefault($(this).parents('tr'));
  81. });
  82. $('[name^=optionType]').change(function()
  83. {
  84. var $tr = $(this).parents('tr');
  85. var $sql = $tr.find('[name^=sql]');
  86. var $options = $tr.find('[name^=options]');
  87. var optionType = $(this).val();
  88. var control = $tr.find('[name^=control]').val();
  89. var isOptionControl = (control == 'select' || control == 'multi-select' || control == 'radio' || control == 'checkbox');
  90. $sql.parent().find('.text-error').remove();
  91. if(isOptionControl && optionType == 'sql')
  92. {
  93. $sql.show();
  94. $options.val('');
  95. $options.hide();
  96. }
  97. else if(isOptionControl && optionType == 'custom')
  98. {
  99. $sql.val('');
  100. $sql.hide();
  101. $options.removeAttr('readonly').show();
  102. }
  103. else
  104. {
  105. $sql.val('');
  106. $sql.hide();
  107. $options.attr('readonly', 'readonly').show();
  108. }
  109. setDefault($tr);
  110. });
  111. $('[name^=options], [name^=sql]').change(function()
  112. {
  113. $(this).parent().find('.text-error').remove();
  114. setDefault($(this).parents('tr'));
  115. });
  116. $('#fieldTable [name^=control]').change();
  117. $('#fieldTable button#submit').click(function(){ setTimeout(function(){$('#fieldTable').resize()}, 100); });
  118. })
  119. function setDefault($tr)
  120. {
  121. var key = $tr.data('key');
  122. var control = $tr.find('[name^=control]').val();
  123. var type = $tr.find('[name^=type]').val();
  124. var optionType = $tr.find('[name^=optionType]').val();
  125. var defaultValue = $tr.find('[name^=default]').val();
  126. var $defaultTD = $tr.find('[name^=default]').parent();
  127. if(control == 'textarea' || control == 'multi-select' || control == 'checkbox' || control == 'richtext' || control == 'file')
  128. {
  129. $defaultTD.html("<input type='text' name='default[" + key + "]' id='default" + key + "' class='form-control' readonly>");
  130. return false;
  131. }
  132. if(control == 'input')
  133. {
  134. $defaultTD.html("<input type='text' name='default[" + key + "]' value='" + defaultValue + "' id='default" + key + "' class='form-control' autocomplete='off'>");
  135. return false;
  136. }
  137. if(control == 'date')
  138. {
  139. var dateOptions =
  140. {
  141. language: config.clientLang,
  142. weekStart: 1,
  143. todayBtn: 1,
  144. autoclose: 1,
  145. todayHighlight: 1,
  146. startView: 2,
  147. minView: 2,
  148. forceParse: 0,
  149. format: 'yyyy-mm-dd'
  150. };
  151. $defaultTD.html("<input type='text' name='default[" + key + "]' id='default" + key + "' class='form-control form-date' autocomplete='off'>");
  152. $tr.find('[name^=default]').datetimepicker(dateOptions);
  153. return false;
  154. }
  155. if(control == 'datetime')
  156. {
  157. var datetimeOptions =
  158. {
  159. language: config.clientLang,
  160. weekStart: 1,
  161. todayBtn: 1,
  162. autoclose: 1,
  163. todayHighlight: 1,
  164. startView: 2,
  165. forceParse: 0,
  166. showMeridian: 1,
  167. format: 'yyyy-mm-dd hh:ii'
  168. };
  169. $defaultTD.html("<input type='text' name='default[" + key + "]' id='default" + key + "' class='form-control form-datetime' autocomplete='off'>");
  170. $tr.find('[name^=default]').datetimepicker(datetimeOptions);
  171. return false;
  172. }
  173. if(control == 'integer')
  174. {
  175. var max = window.maxField[type];
  176. var min = window.minField[type];
  177. $defaultTD.html("<input type='number' name='default[" + key + "]' id='default" + key + "' max='" + max + "' min='" + min + "' step='1' class='form-control' autocomplete='off'>");
  178. return false;
  179. }
  180. if(control == 'decimal' || control == 'formula')
  181. {
  182. var integerDigits = $tr.find('[name^=integerDigits]').val();
  183. integerDigits = integerDigits ? parseInt(integerDigits) : 0;
  184. integerDigits = integerDigits > window.maxField.integerDigits ? window.maxField.integerDigits : integerDigits;
  185. integerDigits = integerDigits < window.minField.integerDigits ? window.defaultField.integerDigits : integerDigits;
  186. integerDigits = parseInt(integerDigits);
  187. var decimalDigits = $tr.find('[name^=decimalDigits]').val();
  188. decimalDigits = decimalDigits ? parseInt(decimalDigits) : 0;
  189. decimalDigits = decimalDigits > window.maxField.decimalDigits ? window.maxField.decimalDigits : decimalDigits;
  190. decimalDigits = decimalDigits < window.minField.integerDigits ? window.defaultField.decimalDigits : decimalDigits;
  191. decimalDigits = parseInt(decimalDigits);
  192. var max = '.'.padStart(integerDigits + 1, 9).padEnd(integerDigits + decimalDigits + 1, 9);
  193. var min = '-' + max;
  194. var step = '0.'.padEnd(decimalDigits + 1, 0) + 1;
  195. $defaultTD.html("<input type='number' name='default[" + key + "]' id='default" + key + "' max='" + max + "' min='" + min + "' step='" + step + "' class='form-control' autocomplete='off'>");
  196. return false;
  197. }
  198. if(!optionType || optionType == 'category' || optionType == 'prevModule')
  199. {
  200. $defaultTD.html("<input type='text' name='default[" + key + "]' id='default" + key + "' class='form-control' autocomplete='off'>");
  201. return false;
  202. }
  203. var name = (control == 'multi-select' || control == 'checkbox') ? 'default[' + key + '][]' : 'default[]';
  204. var defaultValue = $tr.find('[name^=default]').val();
  205. if(typeof defaultValue === 'string') defaultValue = defaultValue.split(',');
  206. if(optionType == 'custom')
  207. {
  208. var multiple = (control == 'multi-select' || control == 'checkbox') ? 'multiple' : '';
  209. $defaultTD.html("<select name='" + name + "' id='default" + key + "' class='form-control'" + multiple + '>');
  210. $defaultTD.find('[name^=default]').append("<option></option>");
  211. var options = $tr.find('[name^=options]').val();
  212. $.each(options.split('\n'), function(index, value)
  213. {
  214. var arr = value.split(',');
  215. var code = arr[0] ? arr[0] : '';
  216. var name = arr[1] ? arr[0] : '';
  217. $defaultTD.find('[name^=default]').append("<option value='" + code + "'>" + name + '</option>');
  218. })
  219. $defaultTD.find('[name^=default]').val(defaultValue).chosen();
  220. }
  221. else
  222. {
  223. var type = $tr.find('[name^=type]').val();
  224. var sql = $tr.find('[name^=sql]').val();
  225. control = window.btoa(encodeURI(control));
  226. sql = window.btoa(encodeURI(sql));
  227. name = window.btoa(encodeURI(name));
  228. value = window.btoa(encodeURI(defaultValue));
  229. var link = createLink('workflowfield', 'ajaxGetDefaultControl', 'mode=advanced&control=' + control + '&optionType=' + optionType + '&type=' + type + '&sql=' + sql + '&sqlVars=&elementName=' + name + '&default=' + value);
  230. $defaultTD.load(link, function()
  231. {
  232. $defaultTD.find('[name^=default]').val(defaultValue);
  233. initDefault($defaultTD.find('[name^=default]'), control, optionType, type, sql);
  234. })
  235. }
  236. return false;
  237. }