init.js 40 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316
  1. 
  2. /**
  3. *
  4. * @param param 上传的参数,例子:
  5. * var parameters = {
  6. * configId:'bxgx_cbgl_plxgzsfs_xgmd_i',//必填项目,FW_IMPEXP的配置ID
  7. * filePath:'C:/Documents and Settings/liguocai/桌面/excel643657087605952371.xls'//必填项目,上传文件的路径
  8. * _commDo:'workflowProxyService.doWork',//非必填项目,上传的后续服务
  9. * } ;
  10. * @param uploadEvents JSON类型,包含上传过程中的回调函数,例如,上传前的校验onStart,上传完成后的回调函数onComplete,
  11. * 上传过程中发生错误的回调函数onFail等等,后面可能会扩充更多的事件。
  12. * 例子:{onComplete:'myFunction1',
  13. * onFail:'myFunction2',
  14. * onStart:'myFunction3'}
  15. * 格式就是 事件名:函数名
  16. * 各个事件的解析:
  17. * 1. onComplete,如果上传成功完毕,调用该函数
  18. * 2. onFail,如果上传过程发生异常,调用该函数
  19. * 3. onStart,上传之前的检验函数,返回true往下执行applet,返回false直接返回,不往下执行
  20. *
  21. * @returns
  22. */
  23. function initUploadApplet(uploadEvents,appletId){
  24. var uploadFileAppletId = appletId||'UploadFileApplet';
  25. var attributes = {id : uploadFileAppletId,
  26. code:'UploadFileApplet',
  27. archive: contextPath+'/applet/UploadFileApplet.jar',
  28. width:710,
  29. height:40,
  30. align:'middle'};
  31. var parameters = { url: _getUrl(),
  32. MAYSCRIPT:true,
  33. onGetJsessionid:uploadEvents.onGetJsessionid,
  34. onGetParams:uploadEvents.onGetParams,
  35. onStart:uploadEvents.onStart,
  36. onFail:uploadEvents.onFail,
  37. onComplete:uploadEvents.onComplete,
  38. cache_option:"NO"
  39. } ;
  40. _setParameters(parameters);
  41. //要求JDK版本1.5或以上
  42. var version = '1.5';
  43. deployJava.runApplet(attributes, parameters, version);
  44. //获取上传的URL
  45. function _getUrl(){
  46. var url = window.location.toString();
  47. var count = 0;
  48. var pos = 0;
  49. for(var i=0;i<url.length;i++){
  50. if(url.charAt(i) == "/"){
  51. count++;
  52. }
  53. if(count == 4){
  54. pos = i;
  55. break;
  56. }
  57. }
  58. return url.substring(0,pos) + "/CommUpload.do";
  59. }
  60. function _setParameters(params){
  61. for(var key in params){
  62. if(null == params[key]){
  63. delete params[key];
  64. }
  65. }
  66. }
  67. }
  68. function setProgressBar(num, id){
  69. if(num<0 || num>100){
  70. return;
  71. }
  72. var uploadAppletId = id || 'UploadFileApplet';
  73. document.getElementById(uploadAppletId).setProgressBar(num);
  74. }
  75. /**
  76. * 把JSON对象的里面值转换成字符串,供applet上传使用
  77. * @param obj JSON对象
  78. * @returns
  79. */
  80. function setJSONAllStr(obj){
  81. for(var key in obj){
  82. if((typeof obj[key])!='string'){
  83. obj[key] = obj[key].toString();
  84. }
  85. }
  86. return obj;
  87. }
  88. /**
  89. * 功能:从初始化文件(.ini)中读取字符串型设置值
  90. * @param filename 字符串,必填,指定初始化文件的名称,包含路径
  91. * @param section 字符串,必填,指定要得到的值所在的节
  92. * @param key 字符串,必填,指定要得到的值的名称,不用区分大小写
  93. * @param defaultValue 字符串,必填,当指定的文件、节名、项目名不存在时,函数返回该参数指定的值返回值
  94. * @param id 字符串,非必填,applet的id,缺省为'UploadFileApplet'
  95. * @returns 函数执行成功时,在指定的文件、节名、项目名不存在任何错误的情况下,函数返回相应项的值;
  96. * 如果指定的文件、节名、项目名不存在,函数返回default参数指定的缺省值;
  97. * 如果发生错误,函数返回空字符串;
  98. * 如果任何参数的值为NULL,ProfileString()函数返回NULL。
  99. */
  100. function ProfileString ( filename, section, key, defaultValue,id) {
  101. //如果任何参数的值为NULL,ProfileString()函数返回NULL
  102. if(null == filename || null == section || null == key || null == defaultValue){
  103. return null;
  104. }
  105. var applet = null;
  106. if(null == id){
  107. applet = _getReadWriteApplet();
  108. }else{
  109. applet = document.getElementById(id);
  110. }
  111. if(null == applet){
  112. alert("找不到applet,无法读写文件");
  113. return "";
  114. }
  115. //文件不存在返回默认值
  116. if(false == applet.isFileExists(filename)){
  117. return defaultValue;
  118. }
  119. var lines = applet.readFile(filename);
  120. //读文件出错返回空字符串
  121. if(null == lines){
  122. return "";
  123. }
  124. var myCRLF = "_SINOBESTCRLF_";
  125. lines = lines.split(myCRLF);
  126. var DIVIDER = "_SINOBESTPARSEFILEDIVIDER_";
  127. var data = _parseFile(lines);
  128. //JSON的KEY都是大写格式,转换成大写查询数据
  129. if(null == data[section+DIVIDER+key.toUpperCase()]){
  130. //如果指定的文件、节名、项目名不存在,函数返回default参数指定的缺省值
  131. return defaultValue;
  132. }else{
  133. //函数执行成功时,在指定的文件、节名、项目名不存在任何错误的情况下,函数返回相应项的值
  134. return data[section+DIVIDER+key.toUpperCase()];
  135. }
  136. //将ini文件转换成JSON对象
  137. function _parseFile(lines){
  138. var posSectionBeg = 0;
  139. var posSectionEnd = 0;
  140. var posEqual = 0;
  141. var section = "";
  142. var key = "";
  143. var value = "";
  144. var rtn = {};
  145. for(var i=0,len=lines.length;i<len;i++){
  146. posSectionBeg = lines[i].indexOf("[");
  147. posSectionEnd = lines[i].indexOf("]");
  148. posEqual = lines[i].indexOf("=");
  149. if(-1!=posSectionBeg && -1!=posSectionEnd){
  150. section = lines[i].substring(posSectionBeg+1,posSectionEnd);
  151. }else if(-1 != posEqual){
  152. key = $.trim(lines[i].substring(0,posEqual));
  153. value = $.trim(lines[i].substring(posEqual+1));
  154. rtn[section+DIVIDER+key.toUpperCase()] = value;//key作为大写保存
  155. }
  156. }
  157. return rtn;
  158. }
  159. /**
  160. * 功能:获取有读写本地文件能力的Applet
  161. * @returns 如果找到,则返回相应的applet对象,否则返回null
  162. */
  163. function _getReadWriteApplet(){
  164. //有读写本地文件能力的applet列表
  165. var appletIds = ["UploadFileApplet","DownloadFileApplet"];
  166. var applet = null;
  167. for(var i=0,len=appletIds.length;i<len;i++){
  168. if(null != document.getElementById(appletIds[i])){
  169. applet = document.getElementById(appletIds[i]);
  170. break;
  171. }
  172. }
  173. return applet;
  174. }
  175. }
  176. /***
  177. * 功能:设置初始化文件中指定项的值。
  178. * @param filename 字符串,必填,指定初始化文件的名称,可以包括路径,省略路径时,该函数按操作系统的标准路径搜索指定文件
  179. * @param section 字符串,必填,指定要设置的值所在的节
  180. * @param key 字符串,必填,指定要设置的值的名称,不用区分大小写
  181. * @param value 字符串,必填,指定要设置项的值
  182. * @param id 字符串,非必填,applet的id,缺省为'UploadFileApplet'
  183. * @returns 返回值 数字
  184. * 函数执行成功时返回1,
  185. * 指定的文件未找到或指定的文件不能访问时函数返回-1。
  186. * 如果任何参数的值为NULL,SetProfileString()函数返回NULL
  187. */
  188. function SetProfileString(filename, section, key,value,id){
  189. if(null == filename || null == section || null == key || null == value){
  190. return null;
  191. }
  192. var applet = null;
  193. if(null == id){
  194. applet = _getReadWriteApplet();
  195. }else{
  196. applet = document.getElementById(id);
  197. }
  198. if(null == applet){
  199. alert("找不到applet,无法读写文件");
  200. return "";
  201. }
  202. //applet返回一个字符串数组,但这个数组只能访问length属性,元素,但是不能使用splice等函数
  203. //这个数组其实JAVA中数组,所以没有JS数组的方法。
  204. var lines = applet.readFile(filename);
  205. if(null == lines){
  206. return -1;
  207. }
  208. //转换为JS的数组
  209. var myCRLF = "_SINOBESTCRLF_";
  210. var arrLines = lines.split(myCRLF);
  211. var head = "[" + section + "]";
  212. var newLine = key + " = " + value;
  213. var isSectionExist = false;
  214. var posSection = -1;
  215. var pos = -1;
  216. //判断section 是否存在,如果存在则获取所在行数写入posHead
  217. for(var i=0,len=arrLines.length;i<len;i++){
  218. pos = arrLines[i].indexOf(head);
  219. if(-1 != pos){
  220. posSection = i;
  221. isSectionExist = true;
  222. break;
  223. }
  224. }
  225. if(true == isSectionExist){
  226. var tKey;
  227. var posEqual = -1;
  228. var posSectionBeg = -1;
  229. var posSectionEnd = -1;
  230. var isKeyExist = false;
  231. var posKey = -1;
  232. //判断KEY是否已经存在
  233. for(var i=posSection+1,len=arrLines.length;i<len;i++){
  234. //先判断是否到达了下一个section
  235. posSectionBeg = arrLines[i].indexOf('[');
  236. posSectionEnd = arrLines[i].indexOf(']');
  237. posEqual = arrLines[i].indexOf('=');
  238. if(-1 != posSectionBeg && -1 != posSectionEnd){
  239. isKeyExist = false;
  240. break;
  241. }else if(-1 != posEqual){
  242. tKey = $.trim((arrLines[i].split('='))[0]);
  243. if(tKey.toUpperCase() == key.toUpperCase()){
  244. isKeyExist = true;
  245. posKey = i;
  246. break;
  247. }
  248. }
  249. }
  250. if(true == isKeyExist){
  251. arrLines[posKey] = newLine;
  252. }else if(false == isKeyExist){
  253. arrLines.splice(posSection + 1, 0, newLine);
  254. }
  255. }else if(false == isSectionExist){
  256. arrLines.push("");
  257. arrLines.push(head);
  258. arrLines.push(newLine);
  259. }
  260. return applet.writeFile(filename,arrLines);
  261. /**
  262. * 功能:获取有读写本地文件能力的Applet
  263. * @returns 如果找到,则返回相应的applet对象,否则返回null
  264. */
  265. function _getReadWriteApplet(){
  266. //有读写本地文件能力的applet列表
  267. var appletIds = ["UploadFileApplet","DownloadFileApplet"];
  268. var applet = null;
  269. for(var i=0,len=appletIds.length;i<len;i++){
  270. if(null != document.getElementById(appletIds[i])){
  271. applet = document.getElementById(appletIds[i]);
  272. break;
  273. }
  274. }
  275. return applet;
  276. }
  277. }
  278. /**
  279. * 功能
  280. * @param filePath 字符串,必填项,删除文件的路径
  281. * @param id 字符串,非必填项,有删除功能applet id,不填则程序会查找页面可用的applet
  282. * @returns 返回1,表示删除成功,返回-1表示删除失败,返回0,表示指定文件不存在
  283. */
  284. function appletDeleteFile(filePath,id){
  285. var applet = null;
  286. if(null == id){
  287. applet = _getDeleteFileApplet();
  288. }else{
  289. applet = document.getElementById(id);
  290. }
  291. if(null == applet){
  292. alert("找不到applet,无法删除文件");
  293. return "";
  294. }
  295. return applet.deleteFile(filePath);
  296. function _getDeleteFileApplet(){
  297. var applet = null;
  298. var appletIds = ["DownloadFileApplet"];
  299. for(var i=0,len=appletIds.length;i<len;i++){
  300. if(null != document.getElementById(appletIds[i])){
  301. applet = document.getElementById(appletIds[i]);
  302. break;
  303. }
  304. }
  305. return applet;
  306. }
  307. }
  308. /**
  309. * 功能:初始化下载applet
  310. * @param downloadEvents JSON对象,必填项,指定事件响应函数
  311. * 例子:
  312. * var downloadEvents = {
  313. * onGetParams : 'onGetParams',//获取参数
  314. * onFail : 'onFail'//错误响应
  315. * };
  316. * @param appletId 字符串,非必填项,applet的id,默认为'DownloadFileApplet'
  317. * @returns
  318. */
  319. function initDownloadApplet(downloadEvents,appletId){
  320. var downloadAppletId = appletId||'DownloadFileApplet';
  321. var attributes = { id: downloadAppletId,
  322. code:'DownloadFileApplet',
  323. archive: contextPath+'/applet/DownloadFileApplet.jar',
  324. width: 0,
  325. height: 0
  326. };
  327. var parameters = { url: _getUrl(),
  328. onFail: downloadEvents.onFail,
  329. onGetParams: downloadEvents.onGetParams,
  330. onGetmyxxid: downloadEvents.onGetmyxxid,
  331. cache_option:"NO",
  332. MAYSCRIPT:true
  333. };
  334. _setParameters(parameters);
  335. //要求JDK版本1.5或以上
  336. var version = '1.5';
  337. deployJava.runApplet(attributes,parameters,version);
  338. function _getUrl(){
  339. var url = window.location.toString();
  340. var count = 0;
  341. var pos = 0;
  342. for(var i=0;i<url.length;i++){
  343. if(url.charAt(i) == "/"){
  344. count++;
  345. }
  346. if(count == 4){
  347. pos = i;
  348. break;
  349. }
  350. }
  351. return url.substring(0,pos) + "/downFile.do";
  352. }
  353. function _setParameters(params){
  354. for(var key in params){
  355. if(null == params[key]){
  356. delete params[key];
  357. }
  358. }
  359. }
  360. }
  361. /**
  362. * 功能:提供给DownloadFileApplet调用的JS函数,用作拼接请求字符串
  363. * @param obj JSON对象,必填项,DownloadFileApplet的下载配置参数
  364. * @returns
  365. */
  366. function downloadAppletGetRquestString(obj){
  367. result = "";
  368. var DIVIDER = "_SINOBESTFILEPATHDIVIDER_";
  369. var filePath = obj["filePath"];
  370. for(var key in obj){
  371. if("filePath" != key){
  372. if('string' != obj[key]){
  373. obj[key] = obj[key].toString();
  374. }
  375. result += (encodeURIComponent(key) + "=" + encodeURIComponent(obj[key]) + "&");
  376. }
  377. }
  378. var len = result.length;
  379. if(0 == len){
  380. return "" + DIVIDER + filePath;
  381. }else{
  382. return result.substring(0,len-1) + DIVIDER + filePath;
  383. }
  384. }
  385. /**
  386. * 功能:使用DownloadFileApplet下载文件
  387. * @param appletId 字符串,非必填项,默认为'DownloadFileApplet'
  388. * @returns 返回值为1, 表示下载成功,
  389. * 返回值为-1,表示下载失败
  390. */
  391. function appletDownload(appletId){
  392. var downloadAppletId = appletId||'DownloadFileApplet';
  393. var applet = document.getElementById(downloadAppletId);
  394. return applet.download();
  395. }
  396. /**
  397. * 生成批量打印按钮。每个页面只能有一个"批量打印"按钮。
  398. */
  399. function genBatchPrintBtn(){
  400. if(0 < document.getElementsByName('batchPrintForm').length){
  401. alert("生成批量打印按钮出错:一个页面只能有一个批量打印按钮");
  402. return;
  403. }
  404. var appRoot = _getUrl();
  405. var ctx = contextPath;
  406. var codebase = appRoot + "/j2re-1_4_1-windows-i586-i.exe#Version=1,4,1,0";
  407. var archive = ctx + "/runqianReport4Applet.jar";
  408. function _getUrl(){
  409. var url = window.location.toString();
  410. var count = 0;
  411. var pos = 0;
  412. for(var i=0;i<url.length;i++){
  413. if(url.charAt(i) == "/"){
  414. count++;
  415. }
  416. if(count == 4){
  417. pos = i;
  418. break;
  419. }
  420. }
  421. //返回类似 "http://127.0.0.1:8080/fw"
  422. return url.substring(0,pos);
  423. }
  424. var html = '<form name="batchPrintForm" >' +
  425. '<input type="hidden" name="reportStr" value=""/>'+
  426. '<input type="hidden" name="jy" value=""/>'+
  427. '<p align="center"><object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" '+
  428. 'id="report1_directPrintApplet" width="80" height="20" style="vertical-align: middle" ' +
  429. 'codebase="'+ codebase + '"' +
  430. ' >'+
  431. '<param name="name" value="report1_directPrintApplet">'+
  432. '<param name="code" value="com.runqian.report4.view.applet.DirectPrintApplet.class">'+
  433. '<param name="archive" value="'+archive+'">'+
  434. '<param name="type" value="application/x-java-applet;version=1.4">'+
  435. '<param name="appRoot" value="'+appRoot+'">'+
  436. '<param name="dataServlet" value="/reportServlet?action=1">'+
  437. '<param name="srcType" value="file">'+
  438. '<param name="fontFace" value="宋体">'+
  439. '<param name="fontSize" value="18pt">'+
  440. '<param name="fontColor" value="#0000FF">'+
  441. '<param name="backColor" value="#12632256">'+
  442. '<param name="label" value="批量打印">'+
  443. '<param name="savePrintSetup" value="yes"> '+
  444. '<param name="needPrintPrompt" value="no">'+
  445. '<param name="scriptable" value="true">'+
  446. '</object></p>'+
  447. '</form>'+
  448. '<script>'+
  449. 'function runqian_getPrintReports() {'+
  450. ' var jyFunc = batchPrintForm.jy.value;'+
  451. ' if(jyFunc!="" && window[jyFunc]!=null){'+
  452. ' if(false==eval(jyFunc+"()")){'+
  453. 'return "";'+
  454. '}'+
  455. ' }'+
  456. ' return batchPrintForm.reportStr.value;'+
  457. '}' + '</script'+'>';
  458. document.write(html);
  459. }//generateBatchPrintBtn() end
  460. /**
  461. * 功能:设置批量打印按钮,指定打印那些报表,传进什么参数。
  462. * 注意点1:可以多次调用该API,调用之后, "批量打印"按钮打印根据设置的字符串打印出相应的报表。
  463. * 注意点2:如果不想打印任何报表,请设置setBatchPrintBtn("");
  464. *
  465. * reportStr:字符串,必填项。
  466. * 格式为:"{无参数报表名}{报表1(参数1=value1;参数2=value2;...)}{报表2(参数1=value1;参数2=value2;...)}..."
  467. * jy : 字符串,可选项。点击批量打印按钮调用的校验函数,如果检验函数返回false,则不打印,否则,继续打印。
  468. * 例子,打印三份报表 "{test.raq}{test2.raq(ID=2;DWSXH=3;)}{test2.raq(ID=3;DWSXH=4;)}"
  469. * {}花括号包含一个报表模板,()小括号包含报表模板的入参,入参分号;隔开,开发人员根据实际情况构造reportStr。
  470. */
  471. function setBatchPrintBtn(reportStr,jy){
  472. batchPrintForm.jy.value = jy||"";
  473. batchPrintForm.reportStr.value = reportStr;
  474. }
  475. /**
  476. * 功能:通过指定配置ID数组,报表参数FORM,初始化批量打印按钮
  477. * @param cfgIds 字符串数组,必填项,配置ID字符串,例子
  478. * ["ybdy_yyqt_cyjs_jsjg","ybdy_yyqt_cyjs_ylfyjsd","ybdy_yyqt_cyjs_grzfxmqd","ybdy_yyqt_cyjs_ylzfxmqd"]
  479. * @param printForm FORM对象,必填项,包含报表参数
  480. * @param jy 字符串,可选项。点击批量打印按钮调用的校验函数,如果检验函数返回false,则不打印,否则,继续打印。
  481. * @returns
  482. * 代码解析:关键就是组装好如下格式的字符串"{报表1(参数1=参数值1;参数2=参数值2;)}{报 表2}",
  483. * 一个花括号包住一个报表模板,如果模板带有入参,则需要加个小括号,在小括号里边写参数。
  484. * 例如"{test.raq}{test2.raq(ID=2;DWSXH=3;)}{test2.raq(ID=3;DWSXH=4;)}"。
  485. * 润乾applet通过读取该字符串,批量打印报表
  486. */
  487. function initBatchReport(cfgIds,printForm,jy){
  488. var ajaxQuerys = [];
  489. for(var i=0,len=cfgIds.length;i<len;i++){
  490. ajaxQuerys.push({
  491. configId:'FW_CONFIG.FW_REPORT_CONF_Q',
  492. parameters:{ID:cfgIds[i]},
  493. transform:'firstRow'
  494. });
  495. }
  496. new Service().appendQuery(ajaxQuerys).sentAjax('设置批量打印参数',function(data){
  497. //设置成"{test.raq}{test2.raq(ID=2;DWSXH=3;)}{test2.raq(ID=3;DWSXH=4;)}"的格式
  498. var reportStr = "";
  499. for(var i=0,len=data.length;i<len;i++){
  500. reportStr += "{";
  501. reportStr += data[i].TEMPLATEFILE;
  502. var reportParm = data[i].REPORTPARM;
  503. if(reportParm != "" && reportParm !=null){
  504. reportStr += _getParamsString(reportParm,printForm);
  505. }
  506. reportStr += "}";
  507. }
  508. setBatchPrintBtn(reportStr,jy||"");
  509. },null,false);//同步执行
  510. //参数字符串,形式为(参数1=参数值1;参数2=参数值2;)
  511. function _getParamsString(reportParm,printForm){
  512. var rst = "";
  513. rst+="(";
  514. params = reportParm.split('|');
  515. for(var i=0,len=params.length;i<len;i++){
  516. rst += params[i] + "=" + (printForm[params[i]] ? printForm[params[i]].value : '')+ ";";
  517. }
  518. rst+=")";
  519. return rst;
  520. }//_getParamsString
  521. }//initBatchReport
  522. ///////////////////////////////////////////////////////////////////////////
  523. //validate.js
  524. ///////////////////////////////////////////////////////////////////////////
  525. ///////////////////////////////////////////////////////////////////////////
  526. //ajax.js
  527. ///////////////////////////////////////////////////////////////////////////
  528. ///////////////////////////////////////////////////////////////////////////
  529. //table.js
  530. ///////////////////////////////////////////////////////////////////////////
  531. jQuery(':input').live('keydown',function(event){
  532. if(this.readOnly!=true){
  533. return true;
  534. }else if(event.keyCode==8){
  535. //屏蔽只读输入框的backspace按键
  536. return false;
  537. }
  538. }).live('dblclick',function(event){
  539. //只读采用双击拷贝内容
  540. copyToClipboard(this.value);
  541. });
  542. $('input,textarea').live('focus',function(event){
  543. //$(this).addClass('focus'); 目前暂时采用这种方式
  544. if($(this).hasClass('readOnly')){
  545. return true;
  546. }
  547. if(this.type=='checkbox'){
  548. return true;
  549. }
  550. var tmp = $(this).css("background-color");
  551. $(this).attr("_color",tmp);
  552. $(this).css("background-color","#FDFDBD");
  553. }).live('blur',function(event){
  554. //$(this).removeClass('focus');
  555. //应用remove 这种方式会导致焦点移开后录入框撑大
  556. if($(this).hasClass('readOnly')){
  557. return true;
  558. }
  559. if(this.type=='checkbox'){
  560. return true;
  561. }
  562. var tmp = $(this).attr("_color");
  563. if(tmp=='#fdfdbd'){
  564. $(this).css("background-color",'white');
  565. }else{
  566. $(this).css("background-color",tmp);
  567. }
  568. });
  569. function copyToClipboard(txt) {
  570. if (window.clipboardData) {
  571. window.clipboardData.clearData();
  572. window.clipboardData.setData("Text", txt);
  573. } else if (navigator.userAgent.indexOf("Opera") != -1) {
  574. window.location = txt;
  575. } else if (window.netscape) {
  576. try {
  577. netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
  578. } catch (e) {
  579. return;
  580. }
  581. var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
  582. if (!clip)
  583. return;
  584. var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
  585. if (!trans)
  586. return;
  587. trans.addDataFlavor('text/unicode');
  588. var str = new Object();
  589. var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
  590. var copytext = txt;
  591. str.data = copytext;
  592. trans.setTransferData("text/unicode", str, copytext.length * 2);
  593. var clipid = Components.interfaces.nsIClipboard;
  594. if (!clip)
  595. return false;
  596. clip.setData(trans, null, clipid.kGlobalClipboard);
  597. }
  598. }
  599. /**
  600. * 获取存储大字典所用的APPLET
  601. * @returns applet对象
  602. */
  603. function FWGetDictApplet(){
  604. var twindow = window;
  605. while(twindow.dialogArguments!=null || twindow.opener != null){
  606. while(twindow.dialogArguments!=null){
  607. if(_isWindow(twindow.dialogArguments)){
  608. twindow = twindow.dialogArguments;
  609. }else if(_isWindow(twindow.dialogArguments.window)){
  610. twindow = twindow.dialogArguments.window;
  611. }
  612. }
  613. while(twindow.opener != null){;
  614. twindow = twindow.opener;
  615. }
  616. }
  617. var tapplet;
  618. tapplet = twindow.top.frames['TreeMenu'].dictapplet;
  619. return tapplet;
  620. function _isWindow(obj){
  621. return obj && typeof obj === "object" && "setInterval" in obj;
  622. }
  623. }
  624. ///////////////////////////////////////////////////////////////////////////
  625. //init.js
  626. ///////////////////////////////////////////////////////////////////////////
  627. //此文件为页面载入时需要初始化的内容以及事件
  628. jQuery(function(){
  629. /**
  630. * 判断对象disabled状态
  631. * @param obj 对象
  632. * @returns true/false
  633. */
  634. function isDisabled(obj) {
  635. if (obj.disabled) {
  636. return true;
  637. }
  638. return false;
  639. }
  640. //捕捉键盘事件
  641. jQuery(document).keydown(function(e){
  642. var el=e.target || e.srcElement;
  643. var iLen=0;
  644. var str="";
  645. if (event.keyCode == 9){//TAB
  646. return true;
  647. }
  648. if(event.keyCode==8){ //backspace
  649. return true;
  650. }
  651. if(event.keyCode==46){ //delete
  652. return true;
  653. }
  654. //处理组合键-快捷方式 ctrl+s、ctrl+y、ctrl+d、ctrl+m、ctrl+q
  655. //s=83 y=89 n=78 d=68 m=77 q=81
  656. if(event.ctrlKey && event.keyCode==83){
  657. $("a").each(function(){
  658. if(this.keycomb=='ctrl+s' && !isDisabled(this)){
  659. $(this).trigger("click");
  660. return true;
  661. }
  662. });
  663. }
  664. if(event.ctrlKey && event.keyCode==89){
  665. $("a").each(function(){
  666. if(this.keycomb=='ctrl+y' && !isDisabled(this)){
  667. $(this).trigger("click");
  668. return false;
  669. }
  670. });
  671. }
  672. if(event.ctrlKey && event.keyCode==76){
  673. $("a").each(function(){
  674. if(this.keycomb=='ctrl+l' && !isDisabled(this)){
  675. $(this).trigger("click");
  676. return false;
  677. }
  678. });
  679. }
  680. if(event.altKey && event.keyCode==81){
  681. $("a").each(function(){
  682. if(this.keycomb=='alt+q' && !isDisabled(this)){
  683. $(this).trigger("click");
  684. return true;
  685. }
  686. });
  687. }
  688. if(event.ctrlKey && event.keyCode==68){
  689. $("a").each(function(){
  690. if(this.keycomb=='ctrl+d' && !isDisabled(this)){
  691. $(this).trigger("click");
  692. return true;
  693. }
  694. });
  695. }
  696. if(event.ctrlKey && event.keyCode==77){
  697. $("a").each(function(){
  698. if(this.keycomb=='ctrl+m' && !isDisabled(this)){
  699. $(this).trigger("click");
  700. return true;
  701. }
  702. });
  703. }
  704. if(event.ctrlKey && event.keyCode==81){
  705. $("a").each(function(){
  706. if(this.keycomb=='ctrl+q' && !isDisabled(this)){
  707. $(this).trigger("click");
  708. return true;
  709. }
  710. });
  711. }
  712. //x=88 信息提示框关闭
  713. if(event.ctrlKey && event.keyCode==88){
  714. $("div.fwmessager-tool-close").each(function(){
  715. if(this.keycomb=='ctrl+x' && !isDisabled(this)){
  716. $(this).trigger("click");
  717. return true;
  718. }
  719. });
  720. $("a").each(function(){
  721. if(this.keycomb=='ctrl+x' && !isDisabled(this)){
  722. $(this).trigger("click");
  723. return true;
  724. }
  725. });
  726. }
  727. //单击回车调用TAB键
  728. if(jQuery(el).is('.textbox,.notpastebox,.datebox,.datetime,.floatbox,.numberbox,.chinessbox,.yearmonthbox,.timebox,.checkbox,.postbox,.phonebox,.idcardbox,.combobox,.zjtextbox,.fwcombox-text,.searchgridbox')){
  729. if (event.keyCode == 13) {
  730. event.keyCode = 9;
  731. return true;
  732. }
  733. }
  734. return true;
  735. });//jQuery(document).keydown 结束
  736. //处理按钮
  737. jQuery('.buttonlink',document).each(function(){
  738. var plain = $(this).attr("plain");
  739. if(plain=="false"||plain==null||plain==""){
  740. $(this).attr({"plain":"true"});
  741. $(this).linkbutton({plain:false});
  742. }
  743. });
  744. //导航栏固定 代码开始
  745. //以下的代码是为了把本页的导航栏提交到frame名为 navigation 的DIV
  746. //为了实现导航栏固定在最上方
  747. var obj_navigator_button = document.all._navigator_button;
  748. if(document.all._menu_button != null){
  749. if( obj_navigator_button !=null){
  750. var obj = document.all._menu_button;
  751. jQuery(obj_navigator_button).html(obj.innerHTML);
  752. }
  753. }
  754. //获取同级的frames的DIV
  755. if(self.parent.navigation!=null){
  756. if(self.parent.navigation._navigator!=null){
  757. var obj_navigator = self.parent.navigation._navigator;
  758. var obj_content_navigator = jQuery("#content_navigator");
  759. if(obj_content_navigator != null ) {
  760. if(obj_navigator != null){ //存在就替换
  761. jQuery(obj_navigator).html(obj_content_navigator.html());
  762. obj_navigator_button = self.parent.navigation._navigator_button;
  763. if(obj_navigator_button != null){
  764. jQuery('a',obj_navigator_button).each(function(){
  765. var tmp = jQuery(this).attr('onclick')+'';
  766. if(tmp!=null&&tmp!=''){
  767. var iPos1 = tmp.indexOf('{')+1;
  768. var iPos2 = tmp.indexOf('}');
  769. var iLen = iPos2 - iPos1;
  770. tmp = tmp.substr(iPos1,iLen);
  771. tmp = "self.parent.workspace." + tmp;
  772. //这样处理的目的是为了另一层的FRAMES可以执行workspace的函数
  773. jQuery(this).removeAttr('onclick');
  774. try{
  775. jQuery(this).bind('click',function(){eval(tmp)});
  776. }catch(e){}
  777. }
  778. });
  779. }
  780. }else{
  781. //不存在就直接显示
  782. jQuery(document.all.content_navigator).css({display:'block'});
  783. }
  784. }else{
  785. if(obj_navigator != null){
  786. jQuery(obj_navigator).html('');
  787. }
  788. }
  789. }
  790. }else{
  791. if(self.frameElement!=null&&self.frameElement.tagName=="IFRAME"){
  792. return;
  793. }
  794. //这种是针对frameset 内还有frameset的情况
  795. if(self.parent.parent.navigation!=null){
  796. var obj_navigator = self.parent.parent.navigation._navigator;
  797. var obj_content_navigator = jQuery("#content_navigator");
  798. if(obj_navigator != null){ //存在就替换
  799. jQuery(obj_navigator).html(obj_content_navigator.html());
  800. }
  801. }
  802. }
  803. //导航栏固定 代码结束
  804. });
  805. /**
  806. * Job操类
  807. */
  808. function FwJob() {
  809. /**
  810. * 执行Job
  811. * @param jobId Job标识
  812. * @param key Job关键字
  813. * @param argsObj 传参
  814. */
  815. this.execute = function(jobId,key,argsObj) {
  816. var refresh = eval("job_"+jobId+"_refresh");
  817. if ($.trim(key) !='') {
  818. $("#"+jobId+"_key").val(key);
  819. }
  820. var args = {"_longTransID":""+jobId,"_longTransKey":$("#"+jobId+"_key").val()};
  821. args = jQuery.extend(args,argsObj);
  822. new Service({serviceId:'longProcessService',method:'scheduler',parameters:args})
  823. .sentAjax(function(data){
  824. if (data == '1') {
  825. CFW.oWin.fnAlert('此任务已在执行中!');
  826. } else {
  827. CFW.oWin.fnAlert('任务提交成功!');
  828. }
  829. FwJob.prototype.clearAllRefresh();
  830. var func = eval("FwJob.prototype.win_job_"+jobId+"_refresh");
  831. func();
  832. var t = setInterval("FwJob.prototype.win_job_"+jobId+"_refresh()",refresh);
  833. FwJob.prototype.__jobRefresh[jobId]=t;
  834. },function(data){
  835. CFW.oWin.fnAlert(data);
  836. FwJob.prototype.clearAllRefresh();
  837. var t = setInterval("FwJob.prototype.win_job_"+jobId+"_refresh()",refresh);
  838. FwJob.prototype.__jobRefresh[jobId]=t;
  839. });
  840. };
  841. }
  842. FwJob.prototype.__jobRefresh = [];
  843. FwJob.prototype.__jobWin = [];
  844. FwJob.prototype.isComplete = function(jobId,key){
  845. var args = {"TRANSID":""+jobId,"KEY":key};
  846. new Service({serviceId:'longProcessService',method:'isComplete',parameters:args})
  847. .sentAjax(function(data){
  848. if (data == '2') {
  849. FwJob.prototype.clearRefresh(jobId);
  850. }
  851. },function(data){
  852. FwJob.prototype.clearRefresh(jobId);
  853. });
  854. };
  855. FwJob.prototype.clearAllRefresh = function(){
  856. for(i = 0;i< FwJob.prototype.__jobRefresh.length; i++){
  857. window.clearInterval(FwJob.prototype.__jobRefresh[i]);
  858. }
  859. };
  860. FwJob.prototype.clearRefresh = function(jobId){
  861. window.clearInterval(FwJob.prototype.__jobRefresh[jobId]);
  862. };
  863. var GBtn = {};
  864. function __btnClick(obj,doAction,delay) {
  865. var txt = $(obj).text();
  866. var times = delay != null && delay != undefined ? delay : 3;
  867. if(!obj.disabled) {
  868. GBtn[obj] = [];
  869. GBtn[obj]['i'] = times;
  870. if (typeof doAction === 'function') {
  871. var resp = doAction() ;
  872. resp = resp == null ? true : resp ;
  873. if (!resp) {
  874. return ;
  875. }
  876. $(obj).linkbutton("disable");
  877. obj.disabled=true;
  878. if (times != -1) {
  879. $(obj).linkbutton({text:txt+" ("+times+"s)"});
  880. GBtn[obj]['t'] = setTimeout(function(){
  881. __btnClick.prototype.delay(obj,txt,times);
  882. }, 1000);
  883. }
  884. } else {
  885. window.location.href = doAction;
  886. }
  887. }
  888. __btnClick.prototype.delay = function(obj,txt,times) {
  889. state = $.data(obj, 'linkbutton');
  890. if(state.options.disabled && times > 0) {
  891. $(obj).linkbutton({text:txt + " ("+ times +"s)"});
  892. times = times - 1;
  893. GBtn[obj]['t'] = setTimeout(function(){
  894. __btnClick.prototype.delay(obj,txt,times);
  895. }, 1000);
  896. } else {
  897. //clearInterval(GBtn[obj]['t']);
  898. $(obj).linkbutton("enable");
  899. $(obj).linkbutton({text:txt});
  900. obj.disabled=false;
  901. //$(this).linkbutton('disable');
  902. }
  903. };
  904. }
  905. /**
  906. * 框架封装对象
  907. */
  908. var FW = {
  909. /**
  910. * 获取全局变量 (访问属性:private)
  911. * @returns {}
  912. */
  913. _getGVAR : function() {
  914. var twindow = this.getTopWindow(window);
  915. var rtn = null;
  916. try{
  917. rtn = twindow.top.frames['banner'].GVAR || {};
  918. }catch(e){
  919. rtn = window.HEAD_GVAR || {};
  920. }
  921. return rtn;
  922. },
  923. /**
  924. * 是否可以使用前端缓存
  925. * @@returns String
  926. */
  927. isLocalStorage :function(){
  928. if(window.localStorage){
  929. return true;
  930. }else{
  931. return false;
  932. }
  933. },
  934. /**
  935. * 获取字典模式 (访问属性:public)
  936. * @@returns String
  937. */
  938. getDictMode : function() {
  939. return this._getGVAR().dictMode;
  940. },
  941. /**
  942. * 字典模式常量 (访问属性:public)
  943. */
  944. DICTMODES : {'SERVER':'server', //ajax获取
  945. 'LOCAL':'local', //本地缓存
  946. 'LOCALSTORAGE':'localstorage' //前端缓存获取
  947. },
  948. /**
  949. * 获取顶层框窗口 (访问属性:public)
  950. * @param window self对象
  951. * @returns top window
  952. */
  953. getTopWindow:function(win) {
  954. var twindow = window;
  955. while(twindow.dialogArguments!=null || twindow.opener != null){
  956. while(twindow.dialogArguments!=null){
  957. twindow = twindow.dialogArguments;
  958. }
  959. while(twindow.opener != null){
  960. twindow = twindow.opener;
  961. }
  962. }
  963. return twindow;
  964. },
  965. /**
  966. * (访问属性:private)
  967. */
  968. _storeDict: function(dictName,dict) {
  969. var GVAR = this._getGVAR();
  970. GVAR.dicts[dictName] = dict;
  971. },
  972. storeDict: function(dicts){
  973. if (FW.getDictMode() == FW.DICTMODES.SERVER ) {
  974. var GVAR = this._getGVAR();
  975. for(var key in dicts){
  976. if(GVAR.dicts[key]==null){
  977. this._storeDict(key, dicts[key])
  978. }
  979. }
  980. }
  981. },
  982. /**
  983. * 通过gltId,page获获取数据
  984. * @param gltId 多记录表ID
  985. * @param formData from表单数据where条件 eg:{"STATE":5,"formEntryId": "form_t_dsdz_qxjyxkz"}
  986. * @param page 分页信息 eg:{"pageNo": 1,"pageSize": 20}
  987. * success:处理成功后触发的函数,原型是function(data)。
  988. */
  989. getPageData : function(gltId,formData,page,success) {
  990. var t_message = '正在请求服务,请稍候...';
  991. var resultPage={};
  992. var thisrequest={};
  993. var t_async = true;
  994. $.ajax({
  995. type : "POST", //提交方式
  996. url:contextPath+"/pageData.do",
  997. contentType:"application/x-www-form-urlencoded;",
  998. dataType: "json",
  999. async:t_async,
  1000. data:{confid:gltId,formDatas:JSON.stringify(formData),pageInfo:JSON.stringify(page)},
  1001. error:function (request, textStatus, errorThrown){alert("获取数据出错!");},
  1002. success:function(result) {
  1003. if(result!=null && result[headtoken]!=null){
  1004. token=result[headtoken];//更新全局变量token标志
  1005. }
  1006. success(result);
  1007. //校验业务处理是否正确执行
  1008. /**
  1009. alert(JSON.stringify(resultPage));
  1010. if("SUCCESS"==result.FLAG){//出错了,弹出错误提醒
  1011. alert(JSON.stringify(result.pageData.result));//
  1012. alert(JSON.stringify(result.pageData.pageNo));//
  1013. alert(JSON.stringify(result.pageData.pageSize));//
  1014. alert(JSON.stringify(result.pageData.totalCount));//
  1015. }else{
  1016. alert(JSON.stringify(result.MSG));//
  1017. }
  1018. */
  1019. },
  1020. beforeSend:function(XMLHttpRequest ){
  1021. var cToken = $.cookie(headtoken) || token;XMLHttpRequest.setRequestHeader(headtoken,cToken);
  1022. $.data(thisrequest,'msg',showMsg(t_message,-1));
  1023. //createProgressBar();
  1024. },
  1025. complete:function( ){
  1026. hideMsg($.data(thisrequest,'msg'));
  1027. }
  1028. });
  1029. },
  1030. /**
  1031. * 通过web获取字典信息 (访问属性:public)
  1032. * @param dictName 字典名
  1033. */
  1034. getDict : function(dictName,whereCls) {
  1035. var GVAR = this._getGVAR();
  1036. var strDynDict="dyndict_";
  1037. //对于动态字典不查询缓存
  1038. if(dictName.substr(0,strDynDict.length)!=strDynDict){
  1039. if (GVAR.dicts[dictName] != null && !jQuery.isEmptyObject(GVAR.dicts[dictName])) {
  1040. return GVAR.dicts[dictName];
  1041. }
  1042. }
  1043. var dict = {};
  1044. if(_ENCRYPT_WHERE){
  1045. if(whereCls!=null&&whereCls!='null'&&whereCls!=''&&whereCls!='undefined'){
  1046. whereCls=stringToHex(encrypt(WHEREKEY,whereCls));
  1047. }
  1048. }
  1049. jQuery.ajax({
  1050. url:contextPath+'/jsp/framework/getDict.jsp'
  1051. ,data:{dictName:dictName,whereCls:whereCls}
  1052. ,cache:true
  1053. ,type:'post'
  1054. ,dataType:'json'
  1055. ,async:false
  1056. ,error:function (request, textStatus, errorThrown){alert("获取字典出错!");}
  1057. ,success:function (data, textStatus){
  1058. dict = data;
  1059. }
  1060. });
  1061. if(dictName.substr(0,strDynDict.length)!=strDynDict){//对于动态字典不做存储
  1062. if (dict != null && !jQuery.isEmptyObject(dict)) {
  1063. this._storeDict(dictName, dict);
  1064. }
  1065. }
  1066. return dict;
  1067. },
  1068. /**
  1069. * 通过前端缓存获取字典信息 (访问属性:public)
  1070. * @param dictName 字典名
  1071. */
  1072. getDictByLocalStorage : function(dictName,whereCls) {
  1073. if(this.isLocalStorage()){
  1074. var strDynDict="dyndict_";
  1075. if (dictName.indexOf('@') > -1) {
  1076. var dictKeys = dictName.split("@");
  1077. var subCode=dictKeys[1];
  1078. if (dictKeys[1] != null && dictKeys[1]!="" ) {
  1079. var dicts=JSON.parse(localStorage.getItem('DICTS'));
  1080. var subdictdata=[];
  1081. var dictdata={};
  1082. if (dicts[dictKeys[0]] != null && !jQuery.isEmptyObject(dicts[dictKeys[0]]) ) {
  1083. dictdata= dicts[dictKeys[0]];
  1084. //alert("1111----"+JSON.stringify(dictdata));
  1085. $.each(dictdata,function(key){
  1086. var value = dictdata[key][3];
  1087. if(value == subCode )
  1088. {
  1089. subdictdata.push(dictdata[key]);
  1090. }
  1091. });
  1092. }
  1093. return subdictdata;
  1094. }
  1095. }else if(dictName.substr(0,strDynDict.length)!=strDynDict){////静态字典通过本地缓存,取不到的返回为空
  1096. var dicts=JSON.parse(localStorage.getItem('DICTS'));
  1097. var dictdata={};
  1098. if (dicts[dictName] != null && !jQuery.isEmptyObject(dicts[dictName])) {
  1099. dictdata= dicts[dictName];
  1100. }
  1101. return dictdata;
  1102. }
  1103. //动态字典依然通过web方式查询
  1104. return this.getDict(dictName, whereCls);
  1105. }else{//本机不支持前端缓存依然采用web方式获取字典内容
  1106. return this.getDict(dictName, whereCls);
  1107. }
  1108. },
  1109. /**
  1110. * 通过前端缓存获取字典信息 (访问属性:public)
  1111. * @param dictName 字典名
  1112. */
  1113. getBDDatasByLocalStorage : function(dictName,query,startRow,pageSize) {
  1114. var datas={};
  1115. if(this.isLocalStorage()){
  1116. var bigdicts=JSON.parse(localStorage.getItem('BIGDICTS'));
  1117. var bigdict=bigdicts[dictName];
  1118. var dictdatas=bigdict['datas'];
  1119. if (dictdatas == null || dictdatas.length==0) {
  1120. return datas;
  1121. } else if (query.length == 0) {
  1122. // 返回全部集合
  1123. var pageData=[];
  1124. var t=Math.min(pageSize,dictdatas.length);
  1125. for(var i=startRow;i<dictdatas.length;i++){
  1126. if(t>0){
  1127. pageData.push(dictdatas[i]);
  1128. }else{
  1129. break;
  1130. }
  1131. t--;
  1132. }
  1133. datas["pageData"]= pageData;
  1134. datas["total"]= dictdatas.length;
  1135. return datas;
  1136. }
  1137. var result=[];
  1138. for(var rowIndex=0;rowIndex<dictdatas.length;rowIndex++){
  1139. var onerow=dictdatas[rowIndex];
  1140. for(var colIndex=0;colIndex<onerow.length;colIndex++){
  1141. var col=onerow[colIndex];
  1142. if(col!=null&&col.indexOf(query)!= -1){
  1143. result.push(onerow);
  1144. break;
  1145. }
  1146. }
  1147. }
  1148. if(result!=null){
  1149. var pageData=[];
  1150. var size=Math.min(pageSize,result.length-startRow);
  1151. for(var i=startRow;i<startRow+size;i++){
  1152. pageData.push(result[i]);
  1153. }
  1154. datas["pageData"]= pageData;
  1155. }
  1156. datas["total"]= result.length;
  1157. return datas;
  1158. }else{
  1159. return datas;
  1160. }
  1161. },
  1162. /**
  1163. * 通过前端缓存获取字典信息 (访问属性:public)
  1164. * @param dictName 字典名
  1165. */
  1166. getBDHeadersByLocalStorage : function(dictName) {
  1167. if(this.isLocalStorage()){
  1168. var bigdicts=JSON.parse(localStorage.getItem('BIGDICTS'));
  1169. var bigdict=bigdicts[dictName];
  1170. return bigdict['columns']
  1171. }else{
  1172. return [];
  1173. }
  1174. },
  1175. /**
  1176. * 字典是否存在
  1177. * @param dictName 字典名
  1178. */
  1179. isExistsDict:function(dictName) {
  1180. var GVAR = this._getGVAR();
  1181. if (GVAR.dicts[dictName] != null && !jQuery.isEmptyObject(GVAR.dicts[dictName])) {
  1182. return true;
  1183. }
  1184. return false;
  1185. },
  1186. showModalDialog:function(href,options) {
  1187. var opt = options;
  1188. if (opt == null || opt == undefined) {
  1189. var w=600,h=400, l = (screen.Width-w)/2,t = (screen.Height-h)/2;
  1190. var locStr = "dialogLeft:" + l + ";dialogTop:" + t;
  1191. opt="status:0;help:0;dialogWidth:"+w+"px;dialogHeight:"+h+"px;"+locStr;
  1192. }
  1193. href += href.indexOf("?") > 0 ? "&" : "?" +"_t="+new Date().getTime();
  1194. return showModalDialog(href,window,opt);
  1195. }
  1196. };