ImgField.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. Ext.define('Ext.ux.form.field.ImgField', {
  2. extend: 'Ext.form.FieldContainer',
  3. alias: 'widget.imgfield',
  4. layout: "hbox",
  5. defaults: {
  6. hideLabel: true
  7. },
  8. isFormField: true,
  9. defaultBindProperty: 'value',
  10. cls: 'remoteimg-field',
  11. initComponent: function () {
  12. var me = this;
  13. Ext.apply(me, {
  14. items: [{
  15. xtype: 'hidden',
  16. name: 'imgPath'
  17. }, {
  18. xtype: 'image',
  19. height: 170,
  20. width: 135,
  21. hidden: true,
  22. src: '',
  23. style: {
  24. 'background-color': '#e6dede'
  25. }
  26. }, {
  27. xtype: 'filefield',
  28. name: 'file',
  29. cls: 'upload-bth',
  30. height: 170,
  31. width: 135,
  32. buttonText: '上传头像',
  33. buttonOnly: true,
  34. hideLabel: true,
  35. // hidden: true,
  36. buttonConfig: {
  37. cls: 'x-filefield-button'
  38. },
  39. listeners: {
  40. change: function (field) {
  41. if (!!field.value) {
  42. me.upload(field);
  43. }
  44. }
  45. }
  46. }, {
  47. xtype: 'component',
  48. cls: 'tool-bar',
  49. hidden: true,
  50. html: '<div class="tools"><span title="放大" class="tool enlarge x-fa fa-expand"></span><span title="删除" class="tool delete font-uas u-delete"></span></div>',
  51. listeners: {
  52. boxready: function(component) {
  53. component.el.dom.onclick = function() {
  54. if(event.target.classList.contains('enlarge')) {
  55. me.enlargeImg();
  56. }else if(event.target.classList.contains('delete')) {
  57. me.deleteImg();
  58. }
  59. };
  60. }
  61. }
  62. }]
  63. });
  64. me.callParent(arguments);
  65. },
  66. listeners: {
  67. boxready: function(container, width, height, e) {
  68. container.el.dom.onmouseenter = function() {
  69. if(container.items.items[1].isVisible()) {
  70. container.items.items[3].setHidden(false);
  71. }
  72. };
  73. container.el.dom.onmouseleave = function() {
  74. if(container.items.items[1].isVisible()) {
  75. container.items.items[3].setHidden(true);
  76. }
  77. }
  78. }
  79. },
  80. setValue: function(v) {
  81. var me = this,
  82. items = me.items.items,
  83. imgPath = items[0],
  84. img = items[1],
  85. fileField = items[2];
  86. if(!!v) {
  87. imgPath.setValue(v);
  88. img.setSrc(v);
  89. img.setHidden(false);
  90. fileField.setHidden(true);
  91. }
  92. me.publishState('value', v);
  93. },
  94. getValue: function() {
  95. return this.items.items[0].value;
  96. },
  97. getValueField: function () {
  98. return this.items.items[0];
  99. },
  100. isValid: function () {
  101. return this.getValueField().isValid();
  102. },
  103. isDirty: function () {
  104. return this.getValueField().isDirty();
  105. },
  106. setReadOnly: function (val) {
  107. var me = this,
  108. items = me.items.items,
  109. imgPath = items[0],
  110. fileField = items[2];
  111. imgPath.setReadOnly(val);
  112. fileField.button.setDisabled(val);
  113. },
  114. resetOriginalValue: function() {
  115. this.getValueField().resetOriginalValue();
  116. },
  117. /**
  118. * 上传附件
  119. */
  120. upload: function (field) {
  121. var me = this;
  122. var fd = new FormData();
  123. fd.append('file', field.fileInputEl.dom.files[0]);
  124. fd.append('folderId', 0);
  125. me.setLoading(true);
  126. Ext.Ajax.request({
  127. // url: 'http://10.1.80.101:9520/api/file/upload', //这里是填写需要跨域访问的URL
  128. url: '/api/file/upload',//这里是填写需要跨域访问的URL
  129. cors: true,
  130. useDefaultXhrHeader: false,
  131. method: 'post',
  132. rawData: fd,
  133. headers: {
  134. // 'Access-Control-Allow-Origin': '*',
  135. // 'Authorization': uas.util.State.get('session').token,
  136. //"Content-Type": 'multipart/form-data' //文件上传的格式,
  137. "Content-Type":null
  138. },
  139. success: function (response, opts) {
  140. me.setLoading(false);
  141. var res = Ext.decode(response.responseText);
  142. if (res.success) {
  143. var data = res.data,
  144. accessPath = Ext.manifest.server.nodeServer.basePath +
  145. '/file/download?filename='+data.name+'&path='+data.path+'&size='+data.size;
  146. me.setValue(accessPath);
  147. } else {
  148. console.error('failure', res);
  149. }
  150. },
  151. failure: function (response, opts) {
  152. me.setLoading(false);
  153. console.error('failure', res);
  154. }
  155. });
  156. },
  157. enlargeImg: function() {
  158. var me = this;
  159. var win = Ext.getCmp('enlarge-win');
  160. if(!win) {
  161. win = Ext.create('Ext.window.Window', {
  162. width: 350,
  163. height: 400,
  164. layout: 'fit',
  165. items: [{
  166. xtype: 'image',
  167. src: me.getValue()
  168. }]
  169. });
  170. }
  171. win.show();
  172. },
  173. deleteImg: function() {
  174. var me = this,
  175. items = me.items.items,
  176. imgPath = items[0],
  177. img = items[1],
  178. fileField = items[2];
  179. console.log("delete");
  180. // Ext.showConfirm('确认删除', '是否确认删除该头像?')
  181. // .then(function(yes) {
  182. // if(yes == 'yes') {
  183. // imgPath.setValue(null);
  184. // img.setSrc(null);
  185. // fileField.reset();
  186. // fileField.setHidden(false);
  187. // img.setHidden(true);
  188. // me.publishState('value', null);
  189. // }
  190. // });
  191. }
  192. });