SeparNumber.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /***
  2. * 支持千分位NumberField
  3. *
  4. * @author yingp
  5. */
  6. Ext.define('erp.view.core.form.SeparNumber', {
  7. extend: 'Ext.form.field.Number',
  8. alias: 'widget.separnumberfield',
  9. initComponent: function(){
  10. var me = this;
  11. me.hideTrigger = true;
  12. me.subTplData = me.subTplData || {};
  13. Ext.apply(me.subTplData, {
  14. suffix : '-separ',
  15. enableSeparator : true
  16. });
  17. me.callParent(arguments);
  18. },
  19. fieldSubTpl: [
  20. '<input id="{id}{suffix}" type="text" style="width: 100%;display: {enableSeparator:this.showTextField};" {inputAttrTpl}',
  21. ' size="1"',
  22. '<tpl if="name"> name="{name}{suffix}"</tpl>',
  23. '<tpl if="value"> value="{value:this.formatValue}"</tpl>',
  24. '<tpl if="placeholder"> placeholder="{placeholder}"</tpl>',
  25. '{%if (values.maxLength !== undefined){%} maxlength="{maxLength}"{%}%}',
  26. '<tpl if="readOnly"> readonly="readonly"</tpl>',
  27. '<tpl if="disabled"> disabled="disabled"</tpl>',
  28. '<tpl if="tabIdx"> tabIndex="{tabIdx}"</tpl>',
  29. '<tpl if="fieldStyle"> style="{fieldStyle}"</tpl>',
  30. ' class="{fieldCls} {typeCls} {editableCls} {inputCls}" autocomplete="off"/>',
  31. '<input id="{id}" type="{type}" style="width: 100%;display: {enableSeparator:this.showNumberField};" ',
  32. '<tpl if="name">name="{name}" </tpl>',
  33. '<tpl if="value"> value="{[Ext.util.Format.htmlEncode(values.value)]}"</tpl>',
  34. '<tpl if="size">size="{size}" </tpl>',
  35. '<tpl if="tabIdx">tabIndex="{tabIdx}" </tpl>',
  36. 'class="{fieldCls} {typeCls}" autocomplete="off" />',
  37. '<div id="{cmpId}-triggerWrap" class="{triggerWrapCls}" role="presentation">',
  38. '{triggerEl}',
  39. '<div class="{clearCls}" role="presentation"></div>',
  40. '</div>',
  41. {
  42. showNumberField : function(e) {
  43. return e === true ? 'none' : 'block';
  44. },
  45. showTextField : function(e) {
  46. return e === true ? 'block' : 'none';
  47. },
  48. formatValue : function(v) {
  49. v = isNaN(v) ? '0' : v;
  50. return Ext.util.Format.number(String(v), "0,000,000.00");
  51. }
  52. }
  53. ],
  54. listeners : {
  55. afterrender : function() {
  56. var me = this, n = me.getInputId(), s = n + me.subTplData.suffix;
  57. me.numberEl = Ext.get(n);
  58. me.textEl = Ext.get(s);
  59. var c = Ext.Function.bind(me.changeEditStatus, me);
  60. Ext.EventManager.on(me.numberEl, {
  61. blur : c,
  62. scope : me,
  63. buffer : 100
  64. });
  65. Ext.EventManager.on(me.textEl, {
  66. focus : c,
  67. scope: me,
  68. buffer : 100
  69. });
  70. setTimeout(function(){
  71. if(me.textEl)
  72. me.textEl.dom.value = me.formatValue(me.getValue());
  73. }, 200);
  74. },
  75. change : function() {
  76. if(this.textEl)
  77. this.textEl.dom.value = this.formatValue(this.getValue());
  78. }
  79. },
  80. changeEditStatus : function(e) {
  81. var me = this;
  82. if (e && e.type == 'focus') {
  83. me.textEl.dom.style.display = 'none';
  84. me.numberEl.dom.style.display = 'block';
  85. me.numberEl.dom.focus();
  86. me.numberEl.dom.select();
  87. } else {
  88. me.numberEl.dom.style.display = 'none';
  89. me.textEl.dom.style.display = 'block';
  90. me.textEl.dom.value = me.formatValue(this.getValue());
  91. }
  92. },
  93. formatValue : function(v) {
  94. v = isNaN(v) ? '0' : v;
  95. return Ext.util.Format.number(String(v), "0,000,000.00");
  96. },
  97. setFieldStyle : function(s) {
  98. var me = this;
  99. me.callParent(arguments);
  100. setTimeout(function(){
  101. if(me.textEl)
  102. me.textEl.setStyle(s);
  103. }, 200);
  104. }
  105. });