HelpDoc.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.ma.HelpDoc', {
  3. extend: 'Ext.app.Controller',
  4. stores: ['TreeStore'],
  5. views: ['common.main.TreePanel','ma.logic.Config', 'core.form.ColorField','core.form.FileField',
  6. 'common.main.Toolbar','core.trigger.SearchField', 'core.trigger.DbfindTrigger'],
  7. FormUtil:Ext.create('erp.util.FormUtil'),
  8. refs: [{
  9. ref: 'tree',
  10. selector: '#tree-panel'
  11. },{
  12. ref: 'tabPanel',
  13. selector: '#tabpanel'
  14. }],
  15. init: function(){
  16. var me = this;
  17. me.FormUtil = Ext.create('erp.util.FormUtil');
  18. me.Toast = Ext.create('erp.view.core.window.Toast');
  19. this.control({
  20. 'erpTreePanel': {
  21. itemmousedown: function(selModel, record){
  22. Ext.defer(function(){
  23. me.onNodeClick(selModel, record);
  24. }, 20);
  25. },
  26. beforerender: function(tree) {
  27. if(window.whoami)
  28. tree.hide();
  29. }
  30. },
  31. 'button[itemId=btn-save]':{
  32. click:function(btn){
  33. me.setHelpDoc(btn.ownerCt.ownerCt);
  34. }
  35. },
  36. 'button[id=btn-scan]':{
  37. click:function(btn){
  38. me.scan();
  39. }
  40. },
  41. 'textfield[name=CALLER_]':{
  42. change:function(field){
  43. Ext.defer(function(){
  44. var field=Ext.ComponentQuery.query('textfield[name=CALLER_]')[0];
  45. var mfield=field.ownerCt.down('mfilefield[name=PATH_]');
  46. if(mfield.items.items[0].value){
  47. mfield.download(mfield.items.items[0].value);
  48. }
  49. },100);
  50. }
  51. }
  52. });
  53. },
  54. onNodeClick: function(selModel, record){
  55. var me = this;
  56. if (record.get('leaf')) {
  57. caller=record.raw.caller;
  58. me.getHelpRecord(record,function(r,caller){
  59. me.loadRecord(r,caller);
  60. });
  61. } else {
  62. if(record.isExpanded() && record.childNodes.length > 0){
  63. record.collapse(true, true);// 已展开则收拢
  64. } else {
  65. //未展开看是否加载了children
  66. if(record.childNodes.length == 0){
  67. me.getChildren(record);
  68. } else {
  69. record.expand(false, true);//展开
  70. }
  71. }
  72. }
  73. },
  74. setHelpDoc:function(form){
  75. var r=form.getValues(),me=this;
  76. Ext.each(Ext.Object.getKeys(r), function(k){//去掉页面非表单定义字段
  77. if(contains(k, 'trashfield-', true)){
  78. delete r[k];
  79. }
  80. });
  81. me.FormUtil.setLoading(true);
  82. Ext.Ajax.request({
  83. url : basePath + 'ma/help/saveHelpDoc.action',
  84. params : {
  85. data:Ext.JSON.encode(r)
  86. },
  87. method : 'post',
  88. callback : function(options,success,response){
  89. me.FormUtil.setLoading(false);
  90. }
  91. });
  92. },
  93. getHelpRecord:function(record,callback){
  94. var caller=record.raw.caller;
  95. if(caller){
  96. Ext.Ajax.request({
  97. url: basePath + 'ma/help/getHelpInfo.action?caller=' + caller,
  98. method: 'GET',
  99. callback: function(opt, s, r) {
  100. if(r && r.status == 200) {
  101. var res = Ext.JSON.decode(r.responseText);
  102. callback.call(null, res.data,caller);
  103. }
  104. }
  105. });
  106. }
  107. },
  108. loadRecord:function(record,caller){
  109. var _scan=false;
  110. if(!record){
  111. record={
  112. CALLER_:caller,
  113. PATH_:null,
  114. VERSION_:null,
  115. KEYWORDS_:null,
  116. DESC_:null
  117. }
  118. }else {
  119. Ext.getCmp('log-grid').getStore().load({
  120. params:{caller:caller}
  121. });
  122. _scan=true;
  123. }
  124. Ext.getCmp('docform').getForm().setValues(record);
  125. this.refreshScan(_scan);
  126. },
  127. scan:function(){
  128. Ext.Ajax.request({
  129. url: basePath + 'ma/help/scan.action?caller=' + caller,
  130. method: 'GET',
  131. callback: function(opt, s, r) {
  132. if(r && r.status == 200) {
  133. var res = Ext.JSON.decode(r.responseText);
  134. var win = Ext.create('Ext.Window', {
  135. id: 'ext-help',
  136. width: '90%',
  137. height: '100%',
  138. closeAction: 'destroy',
  139. title: '帮助文档',
  140. layout: 'border',
  141. items: [{
  142. region:'center',
  143. tag : 'iframe',
  144. layout : 'fit',
  145. html : '<iframe src="' + basePath + res.path + '" height="100%" width="100%" frameborder="0" scrolling="auto"></iframe>'
  146. }/*,{
  147. region: 'south',
  148. height: 100,
  149. split: true,
  150. collapsible: true,
  151. title: '相关信息',
  152. minHeight:60,
  153. collapsed: true,
  154. html: '相关信息'
  155. }*/]
  156. });
  157. win.show();
  158. }
  159. }
  160. });
  161. },
  162. refreshScan:function(bool){
  163. var btn=Ext.getCmp('btn-scan');
  164. if(btn) btn.setDisabled(!bool);
  165. },
  166. /**
  167. * 从后台加载树节点
  168. */
  169. getChildren: function(record) {
  170. var tree = this.getTree();
  171. tree.setLoading(true, tree.body);
  172. Ext.Ajax.request({//拿到tree数据
  173. url : basePath + 'common/lazyTree.action',
  174. params: {
  175. parentId: record.get('id')
  176. },
  177. callback : function(opt, s, r){
  178. tree.setLoading(false);
  179. var res = new Ext.decode(r.responseText);
  180. if(res.tree && record.childNodes.length == 0){
  181. record.appendChild(res.tree);
  182. record.expand(false, true);//展开
  183. } else if(res.exceptionInfo){
  184. showError(res.exceptionInfo);
  185. }
  186. }
  187. });
  188. },
  189. getSetting: function(caller, title){
  190. var me = this;
  191. if(caller) {
  192. if(caller != me.currCaller) {
  193. me.loadConfigs(caller, function(configs){
  194. me.currCaller = caller;
  195. me.setConfigs(configs);
  196. title && me.getConfigPanel().setTitle(title);
  197. });
  198. me.loadInterceptors(caller, function(interceptors){
  199. me.setInterceptors(interceptors);
  200. var tab = me.getTabPanel();
  201. if(interceptors.length == 0 && !tab.collapsed)
  202. tab.collapse();
  203. else if(interceptors.length > 0 && tab.collapsed)
  204. tab.expand();
  205. });
  206. }
  207. } else {
  208. me.currCaller = null;
  209. }
  210. },
  211. /**
  212. * 配置参数
  213. */
  214. loadConfigs: function(caller, callback) {
  215. Ext.Ajax.request({
  216. url: basePath + 'ma/setting/configs.action?caller=' + caller,
  217. method: 'GET',
  218. callback: function(opt, s, r) {
  219. if(r && r.status == 200) {
  220. var res = Ext.JSON.decode(r.responseText);
  221. callback.call(null, res);
  222. }
  223. }
  224. });
  225. },
  226. /**
  227. * 配置逻辑
  228. */
  229. loadInterceptors: function(caller, callback) {
  230. Ext.Ajax.request({
  231. url: basePath + 'ma/setting/interceptors.action?caller=' + caller,
  232. method: 'GET',
  233. callback: function(opt, s, r) {
  234. if(r && r.status == 200) {
  235. var res = Ext.JSON.decode(r.responseText);
  236. callback.call(null, res);
  237. }
  238. }
  239. });
  240. },
  241. setConfigs: function(configs) {
  242. var me = this, pane = me.getConfigPanel(), items = [];
  243. Ext.Array.each(configs, function(c, i){
  244. switch(c.data_type) {
  245. case 'YN':
  246. items.push({
  247. xtype: 'checkbox',
  248. boxLabel: c.title,
  249. name: c.code,
  250. id: c.id,
  251. checked: c.data == 1,
  252. columnWidth: 1,
  253. margin: c.help ? '4 8 0 8' : '4 8 4 8'
  254. });
  255. break;
  256. case 'RADIO':
  257. var s = [];
  258. Ext.Array.each(c.properties, function(p){
  259. s.push({
  260. name: c.code,
  261. boxLabel: p.display,
  262. inputValue: p.value,
  263. checked: p.value == c.data
  264. });
  265. });
  266. items.push({
  267. xtype: 'radiogroup',
  268. id: c.id,
  269. fieldLabel: c.title,
  270. columnWidth: 1,
  271. columns: 2,
  272. vertical: true,
  273. items: s
  274. });
  275. break;
  276. case 'COLOR':
  277. items.push({
  278. xtype: 'colorfield',
  279. fieldLabel: c.title,
  280. id: c.id,
  281. name: c.code,
  282. value: c.data,
  283. readOnly: c.editable == 0,
  284. editable: c.editable == 1,
  285. labelWidth: 150
  286. });
  287. break;
  288. case 'NUMBER':
  289. items.push({
  290. xtype: 'numberfield',
  291. fieldLabel: c.title,
  292. id: c.id,
  293. name: c.code,
  294. value: c.data,
  295. readOnly: c.editable == 0,
  296. labelWidth: 150
  297. });
  298. break;
  299. default :
  300. if(c.multi == 1) {
  301. var data = c.data ? c.data.split('\n') : [null], s = [];
  302. Ext.Array.each(data, function(d){
  303. s.push({
  304. xtype: (c.dbfind ? 'dbfindtrigger' : 'textfield'),
  305. name: c.dbfind || c.code,
  306. value: d,
  307. readOnly: !c.dbfind && c.editable == 0,
  308. editable: c.editable == 1,
  309. clearable: true
  310. });
  311. });
  312. s.push({
  313. xtype: 'button',
  314. text: '添加',
  315. width: 22,
  316. cls: 'x-dd-drop-ok-add',
  317. iconCls: 'x-dd-drop-icon',
  318. iconAlign: 'right',
  319. config: c
  320. });
  321. items.push({
  322. xtype: 'fieldset',
  323. title: c.title,
  324. id: c.id,
  325. name: c.code,
  326. columnWidth: 1,
  327. layout: 'column',
  328. defaults: {
  329. columnWidth: .25,
  330. margin: '4 8 4 8'
  331. },
  332. items: s
  333. });
  334. } else {
  335. items.push({
  336. xtype: (c.dbfind ? 'dbfindtrigger' : 'textfield'),
  337. fieldLabel: c.title,
  338. id: c.id,
  339. name: c.dbfind || c.code,
  340. value: c.data,
  341. readOnly: !c.dbfind && c.editable == 0,
  342. editable: c.editable == 1,
  343. clearable: true,
  344. columnWidth: .5,
  345. labelWidth: 150
  346. });
  347. }
  348. break;
  349. }
  350. if(c.help) {
  351. items.push({
  352. xtype: 'displayfield',
  353. value: c.help,
  354. columnWidth: ['NUMBER', 'VARCHAR2'].indexOf(c.data_type) > -1 ? .5 : 1,
  355. cls: 'help-block',
  356. margin: '4 8 8 8'
  357. });
  358. } else {
  359. if(['NUMBER', 'VARCHAR2'].indexOf(c.data_type) > -1) {
  360. items.push({
  361. xtype: 'displayfield'
  362. });
  363. }
  364. }
  365. });
  366. pane.removeAll();
  367. if(items.length == 0)
  368. items.push({
  369. html: '没有参数配置',
  370. cls: 'x-form-empty'
  371. });
  372. pane.add(items);
  373. },
  374. /**
  375. * 字符长度
  376. */
  377. getCharLength: function(str) {
  378. if(str) {
  379. for (var len = str.length, c = 0, i = 0; i < len; i++)
  380. str.charCodeAt(i) < 27 || str.charCodeAt(i) > 126 ? c += 2 : c++;
  381. return c;
  382. }
  383. return 0;
  384. }
  385. });