InfoCard.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. Ext.define('saas.view.home.InfoCard', {
  2. extend: 'Ext.panel.Panel',
  3. xtype: 'infocard',
  4. id: 'infocard',
  5. requires: [
  6. 'Ext.layout.container.Card'
  7. ],
  8. BaseUtil: Ext.create('saas.util.BaseUtil'),
  9. layout: 'card',
  10. cardTpl: [
  11. '<div class="x-row">',
  12. '<tpl for=".">',
  13. '<div class="x-col">',
  14. '<div>',
  15. '<div class="x-box ',
  16. '<tpl if="color"> x-bg-{color}</tpl>',
  17. '<tpl else"> x-bg-default</tpl>',
  18. '">',
  19. '<h3>{title}</h3>',
  20. '<p>{content}</p>',
  21. '</div>',
  22. '</div>',
  23. '</div>',
  24. '</tpl>',
  25. '</div>'
  26. ],
  27. cards: {
  28. unship: {
  29. title: '七天内待出货销售',
  30. color: 'yellow'
  31. },
  32. unstorage: {
  33. title: '七天内待入库采购',
  34. color: 'purple'
  35. },
  36. unpay: {
  37. title: '七天内代付款',
  38. color: 'red'
  39. },
  40. unreceive: {
  41. title: '七天内代收款',
  42. color: 'pink'
  43. },
  44. unauditcheck: {
  45. title: '未审核验收',
  46. color: 'blue'
  47. },
  48. unauditship: {
  49. title: '未审核出货',
  50. color: ''
  51. }
  52. },
  53. initComponent: function () {
  54. var me = this;
  55. Ext.apply(me, {
  56. userCls: 'x-info-card ' + me.userCls,
  57. lbar: [{
  58. itemId: 'card-prev',
  59. cls: 'x-scroller-button x-scroller-button-left',
  60. handler: function() {
  61. me. showPrevious();
  62. },
  63. disabled: true
  64. }],
  65. rbar: [{
  66. itemId: 'card-next',
  67. cls: 'x-scroller-button x-scroller-button-right',
  68. handler: function() {
  69. me.showNext();
  70. }
  71. }],
  72. items: [],
  73. });
  74. me.callParent(arguments);
  75. },
  76. listeners: {
  77. boforerender: function(m) {
  78. m.addCardItems();
  79. }
  80. },
  81. addCardItems: function(infoData) {
  82. infoData = infoData || {};
  83. var me = this,
  84. p = me.up('home'),
  85. cards = me.cards,
  86. datas = [],
  87. items = [];
  88. size = Math.ceil(me.body.el.getBox().width / 235);
  89. me.removeAll();
  90. var cl = Ext.Object.getAllKeys(cards);
  91. for(var x = 0; x < cl.length;) {
  92. var d = [];
  93. for(var y = 0; y < size && x < cl.length; y++) {
  94. var key = cl[x];
  95. d.push(Ext.merge(cards[key], {
  96. content: infoData[key] || 0
  97. }));
  98. x++;
  99. }
  100. datas.push(d);
  101. }
  102. Ext.Array.each(datas, function(d, i) {
  103. var store = Ext.create('Ext.data.Store', {
  104. fields: ['title', 'content', 'color'],
  105. data: d,
  106. });
  107. var view = Ext.create('Ext.view.View', {
  108. store: store,
  109. tpl: new Ext.XTemplate(me.cardTpl),
  110. itemSelector: 'div.x-info-card-body',
  111. });
  112. var item = {
  113. xtype: 'panel',
  114. id: 'card-' + i,
  115. items: view
  116. };
  117. me.add(item);
  118. });
  119. if(datas.length <= 1) {
  120. me.hidePageTrigger();
  121. }
  122. me.updateLayout(true);
  123. },
  124. hidePageTrigger: function() {
  125. var me = this;
  126. me.down('#card-prev').hide();
  127. me.down('#card-next').hide();
  128. },
  129. showNext: function () {
  130. this.doCardNavigation(1);
  131. },
  132. showPrevious: function (btn) {
  133. this.doCardNavigation(-1);
  134. },
  135. doCardNavigation: function (incr) {
  136. var me = this;
  137. var l = me.getLayout();
  138. var i = l.activeItem.id.split('card-')[1];
  139. var c = me.items.items.length;
  140. var next = parseInt(i, 10) + incr;
  141. l.setActiveItem(next);
  142. me.down('#card-prev').setDisabled(next === 0);
  143. me.down('#card-next').setDisabled(next === (c-1));
  144. }
  145. });