project_property_decimal_view.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. /**
  2. * Created by Zhong on 2017/11/13.
  3. */
  4. //default setting
  5. let decimalObj = {
  6. default: {
  7. min: 0,
  8. max: 6,
  9. bills: {unitPrice: 2, totalPrice: 2},
  10. ration: {quantity: 3, unitPrice: 2, totalPrice: 2},
  11. glj: {quantity: 3, unitPrice: 2},
  12. feeRate: 2,
  13. process: 6
  14. }
  15. };
  16. function isUndef(v) {
  17. return v === undefined || v === null;
  18. }
  19. function isDef(v){
  20. return v !== undefined && v !== null;
  21. }
  22. function isObj(v){
  23. return isDef(v) && typeof v === 'object';
  24. }
  25. function isNum(v){
  26. return isDef(v) && !isNaN(v);
  27. }
  28. function isInt(v){
  29. return isNum(v) && v % 1 === 0;
  30. }
  31. function isValidDigit(v){
  32. return isInt(v) && v >= decimalObj.default.min && v <= decimalObj.default.max;
  33. }
  34. function setDecimal(_digits, data){
  35. if(isDef(data)){
  36. _digits.bills = data.bills || decimalObj.default.bills;
  37. _digits.ration = data.ration || decimalObj.default.ration;
  38. _digits.glj = data.glj || decimalObj.default.glj;
  39. _digits.feeRate = data.feeRate || decimalObj.default.feeRate;
  40. _digits.process = data.process || decimalObj.default.process;
  41. }
  42. else {
  43. _digits.bills = decimalObj.default.bills;
  44. _digits.ration = decimalObj.default.ration;
  45. _digits.glj = decimalObj.default.glj;
  46. _digits.feeRate = decimalObj.default.feeRate;
  47. _digits.process = decimalObj.default.process;
  48. }
  49. }
  50. //获取decimalPanel中要展示的数据
  51. function m_getInitData(data){
  52. let rst = Object.create(null);
  53. rst.bills = data.bills;
  54. rst.ration = data.ration;
  55. rst.glj = data.glj;
  56. rst.feeRate = data.feeRate;
  57. rst.process = data.process;
  58. return rst;
  59. }
  60. //获取小数位数panel里的数据
  61. function m_getDecimalData(inputs){
  62. let rst = Object.create(null);
  63. for(let i = 0, len = inputs.length ; i < len; i++){
  64. let name = $(inputs[i]).attr('name');
  65. let attrs = name.split('-');
  66. if(attrs.length > 1){
  67. if(isUndef(rst[attrs[0]])){
  68. rst[attrs[0]] = Object.create(null);
  69. }
  70. if(isDef(rst[attrs[0]])) {
  71. rst[attrs[0]][attrs[1]] = parseInt($(inputs[i]).val());
  72. }
  73. }
  74. else {
  75. rst[attrs[0]] = parseInt($(inputs[i]).val());
  76. }
  77. }
  78. //set process
  79. rst['process'] = decimalObj.default.process;
  80. return rst;
  81. }
  82. function v_initPanel(data){
  83. if(this.isDef(data)){
  84. for(let attr in data){
  85. if(this.isObj(data[attr])){
  86. for(let subAttr in data[attr]){
  87. let str = attr + '-' + subAttr;
  88. let jqs = 'input[name="' + str + '"]';
  89. $(jqs).val(data[attr][subAttr]);
  90. $(jqs).attr('min', decimalObj.default.min);
  91. $(jqs).attr('max', decimalObj.default.max);
  92. }
  93. }
  94. else {
  95. let str = attr + '';
  96. let jqs = 'input[name="' + str + '"]';
  97. $(jqs).val(data[attr]);
  98. $(jqs).attr('min', decimalObj.default.min);
  99. $(jqs).attr('max', decimalObj.default.max);
  100. }
  101. }
  102. }
  103. }
  104. function e_validIn(inputs){
  105. for(let i = 0, len = inputs.length; i < len; i++){
  106. let orgV = $(inputs[i]).val();
  107. $(inputs[i]).keydown(function () {
  108. let v = $(this).val();
  109. if(v.trim().length > 0 && isValidDigit(v)){
  110. orgV = v;
  111. }
  112. });
  113. $(inputs[i]).keyup(function () {
  114. let v = $(this).val();
  115. if(v.trim().length === 0 || !isValidDigit(v)){
  116. alert('小数位数范围在0-6!');
  117. $(this).val(orgV);
  118. }
  119. else{
  120. //let newV = parseInt(v);
  121. }
  122. });
  123. }
  124. }
  125. function e_bindCof(btn){
  126. btn.bind('click', function () {
  127. //获取更新的数据
  128. let updateDecimal = m_getDecimalData($('input', '#poj-settings-decimal'));
  129. a_updateDigits(updateDecimal);
  130. });
  131. }
  132. function e_unbindCof(btn){
  133. btn.unbind();
  134. }
  135. function a_updateDigits(updateDecimal){
  136. let url = '/pm/api/updateProjects';
  137. let data = {
  138. updateType: 'update',
  139. updateData: {
  140. ID: parseInt(scUrlUtil.GetQueryString('project')),
  141. 'property.decimal': updateDecimal
  142. }
  143. };
  144. let postData = {
  145. user_id: userID,
  146. updateData: [data]
  147. };
  148. let scCaller = function (resultData) {
  149. //update data
  150. setDecimal(decimalObj, updateDecimal);
  151. let v_data = m_getInitData(decimalObj);
  152. v_initPanel(v_data);
  153. };
  154. let errCaller = function () {
  155. alert('更新小数位数失败!');
  156. };
  157. CommonAjax.post(url, postData, scCaller, errCaller);
  158. }
  159. $(document).ready(function () {
  160. //绑定小数位数输入控制
  161. e_validIn($('input', '#poj-settings-decimal'));
  162. //绑定小数位数确认更新按钮
  163. $('#tab_poj-settings-decimal').on('shown.bs.tab', function (e) {
  164. e_bindCof($('#property_ok'));
  165. let v_data = m_getInitData(decimalObj);
  166. v_initPanel(v_data);
  167. });
  168. $('#tab_poj-settings-decimal').on('hidden.bs.tab', function (e) {
  169. e_unbindCof($('#property_ok'));
  170. })
  171. });