FormPanel.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498
  1. Ext.define('saas.view.sys.config.FormPanel', {
  2. extend: 'Ext.form.Panel',
  3. xtype: 'sys-config-formpanel',
  4. controller: 'sys-config-formpanel',
  5. viewModel: 'sys-config-formpanel',
  6. //字段属性
  7. _idField: 'id',
  8. _readUrl:'/api/account/company/read/current',
  9. _saveUrl:'/api/account/company/save',
  10. requires: [
  11. 'Ext.form.field.File'
  12. ],
  13. //基础属性
  14. frame:true,
  15. initId: 0,
  16. layout: 'vbox',
  17. autoScroll: true,
  18. border: 1,
  19. bodyPadding: 5,
  20. fieldDefaults: {
  21. margin: '0 5 5 30',
  22. labelAlign: 'right',
  23. labelWidth: 90,
  24. width:300,
  25. blankText: '该字段不能为空'
  26. },
  27. bbar:{
  28. frame:true,
  29. items:['->',{
  30. text:'保存',
  31. formBind:true,
  32. name:'save'
  33. },'->']
  34. },
  35. items: [{
  36. bind:'{id}',
  37. xtype: 'hidden',
  38. name: 'id',
  39. fieldLabel: 'id',
  40. allowBlank: true,
  41. width:600
  42. },{
  43. bind:'{name}',
  44. xtype: 'textfield',
  45. name: 'name',
  46. fieldLabel: '公司名称',
  47. allowBlank: true,
  48. editable:false,
  49. readOnly:true,
  50. width:600
  51. },{
  52. bind:'{address}',
  53. xtype: 'textfield',
  54. name: 'address',
  55. fieldLabel: '公司地址',
  56. beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
  57. allowBlank: false,
  58. width:600
  59. },{
  60. bind:'{tel}',
  61. xtype: 'textfield',
  62. name: 'tel',
  63. fieldLabel: '电话',
  64. beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
  65. allowBlank: false,
  66. width:500
  67. },{
  68. bind:'{fax}',
  69. xtype: 'textfield',
  70. name: 'fax',
  71. fieldLabel: '传真',
  72. allowBlank: true,
  73. width:500
  74. }
  75. // ,{
  76. // bind:'{en_begindate}',
  77. // xtype : "datefield",
  78. // name : "en_begindate",
  79. // format:'Y-m-d H:i:s',
  80. // fieldLabel : "开账日期",
  81. // allowBlank : true,
  82. // editable:false,
  83. // hideTrigger:true,
  84. // readOnly:true,
  85. // width:500
  86. // }
  87. // ,{
  88. // bind:'{en_pricemethod}',
  89. // displayField : "display",
  90. // editable:false,
  91. // hideTrigger : false,
  92. // maxLength : 100.0,
  93. // width:500,
  94. // minValue : null,
  95. // queryMode : "local",
  96. // valueField : "value",
  97. // xtype : "combo",
  98. // value:'WACC',
  99. // store:{
  100. // fields: ['display', 'value'],
  101. // data : [
  102. // {"display":"加权平均法", "value":'WACC'},
  103. // {"display":"先进先出法", "value":'FIFO'}
  104. // ]
  105. // },
  106. // name : "en_pricemethod",
  107. // beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
  108. // fieldLabel : "库存计算方式",
  109. // allowBlank : false,
  110. // }
  111. // ,{
  112. // ignore:true,
  113. // bind:'{updateTime}',
  114. // xtype : "datefield",
  115. // name : "updateTime",
  116. // fieldLabel : "更新时间",
  117. // allowBlank : true,
  118. // hideTrigger:true,
  119. // format:'Y-m-d H:i:s',
  120. // editable:false,
  121. // readOnly:true,
  122. // width:500,
  123. // }
  124. ,{
  125. xtype: 'form',
  126. width:600,
  127. frame: false,
  128. border: false,
  129. minHeight: 22,
  130. bodyStyle: 'padding:2px;',
  131. layout: 'vbox',
  132. items:[{
  133. bind:'{signet}',
  134. name : "signet",
  135. allowBlank : true,
  136. hidden:true,
  137. xtype:'textfield'
  138. },{
  139. allowBlank : true,
  140. width:150,
  141. buttonOnly:true,
  142. fieldLabel:'打印章上传',
  143. xtype: 'filefield',
  144. name:'signetFilefield',
  145. buttonText: '选择图片',
  146. createFileInput : function() {
  147. var me = this;
  148. me.fileInputEl = me.button.el.createChild({
  149. name: me.getName(),
  150. cls: Ext.baseCSSPrefix + 'form-file-input',
  151. tag: 'input',
  152. type: 'file',
  153. size: 1,
  154. accept:"image/*"
  155. }).on('change', me.onFileChange, me);
  156. },
  157. listeners: {
  158. afterrender:function(field,ops){
  159. var fileEl = field.fileInputEl.dom;
  160. fileEl.setAttribute("accept","image/*");
  161. },
  162. change: function(field,nowValue,oldValue){
  163. if(nowValue==""){
  164. return true;
  165. }
  166. var form = field.ownerCt.ownerCt;
  167. var myForm = field.ownerCt;
  168. var fileEl = field.fileInputEl.dom;
  169. var fd = new FormData();
  170. fd.append('file', fileEl.files[0]);
  171. fd.append('folderId', 0);
  172. form.setLoading(true);
  173. Ext.Ajax.request({
  174. url: '/api/file/upload',//这里是填写需要跨域访问的URL
  175. cors: true,
  176. useDefaultXhrHeader: false,
  177. method: 'post',
  178. rawData: fd,
  179. headers: {
  180. 'Access-Control-Allow-Origin': '*',
  181. 'Authorization': saas.util.State.get('session').token,
  182. //"Content-Type": 'multipart/form-data' //文件上传的格式,
  183. "Content-Type":null
  184. },
  185. success: function (response, opts) {
  186. form.setLoading(false);
  187. var res = Ext.decode(response.responseText);
  188. if(res.success){
  189. saas.util.BaseUtil.showSuccessToast('上传成功');
  190. var data = res.data;
  191. var name = data.name + " (" + Ext.util.Format.fileSize(data.size) + ")";
  192. myForm.down('[name=signet]').setValue(data.fullPath);
  193. field.setRawValue(name);
  194. //读取图片
  195. if(data.id){
  196. var serverOptions = Ext.manifest.server;
  197. var img = myForm.down('[name=SignetPhoto]');
  198. img.el.dom.src = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/file/download?path='+data.fullPath;
  199. var showSignetPhoto = form.down('[name=showSignetPhoto]');
  200. showSignetPhoto.show();
  201. }
  202. }else{
  203. saas.util.BaseUtil.showErrorToast('上传失败: ' + res.message);
  204. }
  205. },
  206. failure: function (response, opts) {
  207. form.setLoading(false);
  208. var res = Ext.decode(response.responseText);
  209. saas.util.BaseUtil.showErrorToast('上传失败: ' + res.message);
  210. }
  211. });
  212. }
  213. }
  214. },{
  215. xtype:'displayfield',
  216. margin:'0 0 0 150',
  217. value:'支持 JPG、JPEG、PNG、BMP 格式 , 图片小于10M ',
  218. },{
  219. xtype: 'image',
  220. width: 100,
  221. height: 100,
  222. margin:'0 0 5 150',
  223. src:'resources/images/default/basePhoto.png',
  224. name:'SignetPhoto',
  225. },{
  226. margin:'0 0 5 151',
  227. xtype:'container',
  228. name:'showSignetPhoto',
  229. cls:'x-container-group',
  230. hidden:true,
  231. items:[{
  232. width: 45,
  233. height: 24,
  234. xtype:'button',
  235. text:'查看',
  236. handler:function(b){
  237. var form = b.ownerCt.ownerCt.ownerCt;
  238. var img = form.down('[name=SignetPhoto]');
  239. form.lookPic(img);
  240. }
  241. },{
  242. margin:'0 0 0 10',
  243. width: 45,
  244. height: 24,
  245. xtype:'button',
  246. text:'下载',
  247. handler:function(b){
  248. var form = b.ownerCt.ownerCt.ownerCt;
  249. var path = form.down('[name=signet]').value;
  250. form.downLoad(path);
  251. }
  252. }]
  253. }]
  254. },{
  255. xtype: 'form',
  256. width:600,
  257. frame: false,
  258. border: false,
  259. minHeight: 22,
  260. bodyStyle: 'padding:2px;',
  261. layout: 'vbox',
  262. items:[{
  263. bind:'{logoUrl}',
  264. name : "logoUrl",
  265. allowBlank : true,
  266. hidden:true,
  267. xtype:'textfield'
  268. },{
  269. allowBlank : true,
  270. width:150,
  271. buttonOnly:true,
  272. fieldLabel:'Logo上传',
  273. name:'logoFilefield',
  274. xtype: 'filefield',
  275. buttonText: '选择图片',
  276. createFileInput : function() {
  277. var me = this;
  278. me.fileInputEl = me.button.el.createChild({
  279. name: me.getName(),
  280. cls: Ext.baseCSSPrefix + 'form-file-input',
  281. tag: 'input',
  282. type: 'file',
  283. size: 1,
  284. accept:"image/*"
  285. }).on('change', me.onFileChange, me);
  286. },
  287. listeners: {
  288. afterrender:function(field,ops){
  289. var fileEl = field.fileInputEl.dom;
  290. fileEl.setAttribute("accept","image/*");
  291. },
  292. change: function(field,nowValue,oldValue){
  293. if(nowValue==""){
  294. return true;
  295. }
  296. var form = field.ownerCt.ownerCt;
  297. var myForm = field.ownerCt;
  298. var fileEl = field.fileInputEl.dom;
  299. var fd = new FormData();
  300. fd.append('folderId', 0);
  301. fd.append('file', fileEl.files[0]);
  302. form.setLoading(true);
  303. Ext.Ajax.request({
  304. url: '/api/file/upload',//这里是填写需要跨域访问的URL
  305. cors: true,
  306. useDefaultXhrHeader: false,
  307. method: 'post',
  308. rawData: fd,
  309. headers: {
  310. 'Access-Control-Allow-Origin': '*',
  311. 'Authorization': saas.util.State.get('session').token,
  312. //"Content-Type": 'multipart/form-data' //文件上传的格式,
  313. "Content-Type":null
  314. },
  315. success: function (response, opts) {
  316. form.setLoading(false);
  317. var res = Ext.decode(response.responseText);
  318. if(res.success){
  319. saas.util.BaseUtil.showSuccessToast('上传成功');
  320. var data = res.data;
  321. var name = data.name + " (" + Ext.util.Format.fileSize(data.size) + ")";
  322. myForm.down('[name=logoUrl]').setValue(data.fullPath);
  323. //读取图片
  324. if(data.id){
  325. var serverOptions = Ext.manifest.server;
  326. var img = myForm.down('[name=LogoPhoto]');
  327. img.el.dom.src = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/file/download?path='+data.fullPath;
  328. var showLogoPhoto = form.down('[name=showLogoPhoto]');
  329. showLogoPhoto.show();
  330. }
  331. }else{
  332. saas.util.BaseUtil.showErrorToast('上传失败: ' + res.message);
  333. }
  334. },
  335. failure: function (response, opts) {
  336. form.setLoading(false);
  337. var res = Ext.decode(response.responseText);
  338. saas.util.BaseUtil.showErrorToast('上传失败: ' + res.message);
  339. }
  340. });
  341. }
  342. }
  343. },{
  344. xtype:'displayfield',
  345. margin:'0 0 0 150',
  346. value:'支持 JPG、JPEG、PNG、BMP 格式 , 图片小于10M ',
  347. },{
  348. xtype: 'image',
  349. style:'border:1px solid #f7f7f7;',
  350. width: 100,
  351. height: 100,
  352. margin:'0 0 5 150',
  353. src:'resources/images/default/basePhoto.png',
  354. name:'LogoPhoto',
  355. },{
  356. name:'showLogoPhoto',
  357. margin:'0 0 5 151',
  358. xtype:'container',
  359. cls:'x-container-group',
  360. hidden:true,
  361. items:[{
  362. width: 45,
  363. height: 24,
  364. xtype:'button',
  365. text:'查看',
  366. handler:function(b){
  367. var form = b.ownerCt.ownerCt.ownerCt;
  368. var img = form.down('[name=LogoPhoto]');
  369. form.lookPic(img);
  370. }
  371. },{
  372. margin:'0 0 0 10',
  373. width: 45,
  374. height: 24,
  375. xtype:'button',
  376. text:'下载',
  377. handler:function(b){
  378. var form = b.ownerCt.ownerCt.ownerCt;
  379. var path = form.down('[name=logoUrl]').value;
  380. form.downLoad(path);
  381. }
  382. }]
  383. }]
  384. }],
  385. initComponent: function () {
  386. var me = this,
  387. viewModel = me.getViewModel();
  388. var url = me._readUrl;
  389. saas.util.BaseUtil.request({url })
  390. .then(function(res) {
  391. if(res.success) {
  392. var d = res.data;
  393. viewModel.setData(d);
  394. viewModel.notify();
  395. me.load(me);
  396. }
  397. })
  398. .catch(function(response) {
  399. console.error(response);
  400. });
  401. me.callParent(arguments);
  402. },
  403. refresh:function(){
  404. this.ownerCt.setTitle('参数设置')
  405. },
  406. load:function(form){
  407. var serverOptions = Ext.manifest.server;
  408. //打印章
  409. var signet = form.down('[name=signet]').value;
  410. if(signet&&signet!=''){
  411. var img = form.down('[name=SignetPhoto]');
  412. img.el.dom.src = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/file/download?path='+signet;
  413. var showSignetPhoto = form.down('[name=showSignetPhoto]');
  414. showSignetPhoto.show();
  415. }
  416. //Logo
  417. var logoUrl = form.down('[name=logoUrl]').value;
  418. if(logoUrl&&logoUrl!=''){
  419. var img = form.down('[name=LogoPhoto]');
  420. img.el.dom.src = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/file/download?path='+logoUrl;
  421. var showLogoPhoto = form.down('[name=showLogoPhoto]');
  422. showLogoPhoto.show();
  423. }
  424. //文件名称
  425. var viewModel = form.getViewModel();
  426. if(viewModel.data.fileInfoList&&viewModel.data.fileInfoList.length!=0){
  427. var logo = viewModel.data.fileInfoList[0].logo;
  428. //var logoName = logo.name + " (" + Ext.util.Format.fileSize(logo.size) + ")";
  429. var signet = viewModel.data.fileInfoList[0].signet;
  430. //var signetName = signet.name + " (" + Ext.util.Format.fileSize(signet.size) + ")";
  431. }
  432. },
  433. lookPic:function(img){
  434. var me = this, resizer = me.resizer,
  435. imageframe = document.getElementById('ext-image-frame');
  436. var src = img.el.dom.src;
  437. if (!imageframe) {
  438. var el = Ext.DomHelper.append(document.body, '<img id="ext-image-frame" src="' + src +
  439. '" width="500" height="400" style="position:absolute;left:0;top:0px;"/>', true);
  440. imageframe = el.dom;
  441. } else {
  442. imageframe.src = src;
  443. }
  444. if (!resizer) {
  445. resizer = this.resizer = Ext.create('Ext.resizer.Resizer', {
  446. target: 'ext-image-frame',
  447. pinned: true,
  448. width: 410,
  449. height: 310,
  450. minWidth: 100,
  451. minHeight: 80,
  452. preserveRatio: true,
  453. handles: 'all',
  454. dynamic: true,
  455. constrainTo:me.getEl()
  456. });
  457. var resizerEl = resizer.getEl();
  458. resizerEl.on('dblclick', function(){
  459. resizerEl.hide(true);
  460. });
  461. }
  462. resizer.getEl().center();
  463. resizer.getEl().show(true);
  464. Ext.DomHelper.applyStyles(imageframe, 'position:absolute;z-index:100;');
  465. },
  466. downLoad:function(path){
  467. var serverOptions = Ext.manifest.server;
  468. window.location.href = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/file/download?path='+path;
  469. //ajax 响应下载必须要创建一个form实例
  470. // if (!Ext.fly('ext-attach-download')) {
  471. // var frm = document.createElement('form');
  472. // frm.id = 'ext-attach-download';
  473. // frm.name = id;
  474. // frm.className = 'x-hidden';
  475. // document.body.appendChild(frm);
  476. // }
  477. // Ext.Ajax.request({
  478. // url: 'http://192.168.253.31:8560/api/file/download?path='+path,
  479. // method: 'post',
  480. // form: Ext.fly('ext-attach-download'),
  481. // isUpload: true,
  482. // params: ''
  483. // });
  484. }
  485. });