FormPanel.js 18 KB

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