OfficePlugin.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. /**
  2. * Office插件,用于自定义表单。
  3. *
  4. * 1.OfficePlugin.init();
  5. * 加载office控件。
  6. *
  7. * 2.OfficePlugin.submit();
  8. * 保存office文档。
  9. */
  10. OfficePlugin={
  11. //当前登陆用户相关信息件对象
  12. user:{id:"0",name:"开发用户",groupId:"0",groupName:"开发部"},
  13. //office控件对象
  14. officeObjs:new Array(),
  15. //附件对象
  16. fileObjs:null,
  17. //判断当前表单页面是否有office控件。
  18. hasOfficeFields:new Array(),
  19. //判断当前表单页面所有office控件是否都提交了。
  20. hasSubmitOffices:new Array(),
  21. //有多少文档可以提交的
  22. submitNum:null,
  23. //当前提交文档变量
  24. submitNewNum:null,
  25. //是否初始化tab中的OFFICE工具栏目的隐藏问题。在FormUtil用到
  26. isTabItemOffice:true,
  27. //初始化
  28. //所做的操作如下:
  29. //1.检查当前表单中是否有office控件。
  30. //2.如果存在office控件
  31. // 获取文件id,将office控件添加到容器中。
  32. init:function(){
  33. this.officeObjs=new Array();
  34. this.hasOfficeFields=new Array();
  35. this.hasSubmitOffices=new Array();
  36. this.user = getDocUserData();
  37. var num = 0;
  38. var myNum = 0;
  39. this.fileObjs=$("input[controltype='office']");
  40. for ( var i = 0; i < this.fileObjs.length; i++) {
  41. var fileObj = this.fileObjs.get(i);
  42. var name=fileObj.getAttribute("name");
  43. var fileId=fileObj.getAttribute("value");
  44. //获取附件的扩展名
  45. var doctype = "";
  46. if(fileId!=null&&fileId!=""){
  47. doctype = sysFileType(fileId);
  48. }else{
  49. fileId="";
  50. doctype = fileObj.getAttribute("doctype");
  51. }
  52. if(doctype){
  53. doctype = doctype.toLowerCase();
  54. if(doctype=='pptx'){
  55. doctype='ppt';
  56. }else if(doctype=='docx'){
  57. doctype = 'doc';
  58. }else if(doctype=='xlsx'){
  59. doctype = 'xls';
  60. }
  61. }
  62. //容器的ID
  63. var divId="div_" + name.replaceAll(":","_");
  64. //容器样式修改
  65. var div_rq = $("#" + divId);
  66. if(!div_rq || div_rq.length<1){
  67. //如果找不到容器,则为表单生成模式,需要生成一个容器div
  68. div_rq = $('<div id="'+divId+'" class="office-div"></div>');
  69. $(fileObj).after(div_rq);
  70. }
  71. var dwidth = div_rq.css("width").toLowerCase().replaceAll("px","");
  72. if(dwidth<700){
  73. div_rq.css("width","700px");
  74. }
  75. var dheight = div_rq.css("height").toLowerCase().replaceAll("px","");
  76. if(dheight<700){
  77. div_rq.css("height","700px");
  78. }
  79. //必填 已在其它处理
  80. var validRule = fileObj.getAttribute("validate");
  81. if ( validRule != null && 'undefined' != validRule.toLowerCase() && validRule.length>2 ){
  82. var json = eval('(' + validRule + ')');
  83. if(json.required){
  84. //不做操作
  85. }else{
  86. var jsonStr = validRule.substring(0, validRule.lastIndexOf('}'));
  87. jsonStr +=",\'required\':true}"; //加上必填
  88. fileObj.setAttribute("validate",jsonStr);
  89. }
  90. }else{
  91. fileObj.setAttribute("validate","{\'required\':true}"); //必填
  92. }
  93. num++; //做可提交的标志数量
  94. $.ligerDialog.waitting('正在加载OFFICE文档,请稍候...');
  95. //加载控件。
  96. var officeObj= new OfficeControl();
  97. this.officeObjs.push(officeObj);
  98. //加载office控件。
  99. officeObj.renderTo(divId,{fileId:fileId,doctype:doctype,myNum:myNum,user:this.user});
  100. //是否有office控件。
  101. this.hasOfficeFields.push(true);
  102. //office控件文档标志
  103. this.hasSubmitOffices.push(false);
  104. myNum++; //序号
  105. $.ligerDialog.closeWaitting();
  106. }
  107. this.submitNum = num; //文档是可以做提交的数目 总娄
  108. this.submitNewNum = 0; //文档是提交了的数目 变化的(重新清空)
  109. },
  110. //提交文件保存。
  111. //如果有office控件。则保存后将返回的附件id放到隐藏域。
  112. submit:function(callBack){
  113. $.ligerDialog.waitting('正在保存OFFICE文档中,请稍候...');
  114. // var _self=this;
  115. for ( var cn = 0; cn < this.officeObjs.length; cn++) {
  116. var officeObj= this.officeObjs[cn];
  117. if(!this.hasOfficeFields[cn]) return;
  118. if(callBack){
  119. this.callBack=callBack;
  120. }
  121. //保存到服务器。
  122. var result=officeObj.saveRemote(cn);
  123. if(result==-11){
  124. //由 火狐谷歌浏览器控件文档保存事件(异步的,IE是同步的)回调接管函数 OfficeControl.js 中有 saveToURLOnComplete 处理
  125. }else if(result==-13){
  126. //由 火狐谷歌浏览器控件文档保存事件报错不能由回调接管函数 OfficeControl.js 中有 saveToURLOnComplete 处理 ,直接 在这里处理
  127. //下面处理的是如果没安装控件,也可以正常提交表单(建议注销保留)
  128. /*result = this.fileObjs.get(cn).getAttribute("value"); //保存到对象的值;
  129. if(result>0){
  130. officeObj.config.fileId = result; //控件中config对象的fileId
  131. this.fileObjs.get(cn).setAttribute("value",result);
  132. this.hasSubmitOffices[cn]=true; //完成标志
  133. this.submitNewNum = this.submitNewNum + 1; //文档是提交了的数目 变化的(重新清空)
  134. if(this.submitNum == this.submitNewNum){ //当提交问题 等于 提交数量的变量 时 表示所有文档 都提交了 然后做 业务相关的提交
  135. var data=CustomForm.getData();
  136. //设置表单数据
  137. $("#formData").val(data);
  138. $('#frmWorkFlow').submit();
  139. this.submitNewNum = 0; //重置 提交数量的变量
  140. }else{
  141. if(cn==this.officeObjs.length){
  142. $.ligerDialog.warn("提交失败,OFFICE控件没能正常使用,请重新安装 !!!","提示");
  143. }
  144. }
  145. }else{
  146. $.ligerDialog.warn("提交失败,OFFICE控件没能正常使用,请重新安装 !!!","提示");
  147. break
  148. }*/
  149. //$.ligerDialog.warn("提交失败,OFFICE控件没能正常使用,请重新安装 !!!","提示");
  150. alert("提交失败,OFFICE控件没能正常使用,请重新安装 !!!");
  151. break;
  152. }else{
  153. //将结果放到隐藏域。(同步的 处理方法 IE 360 等)
  154. //如果返回的是错误的内容,就保存以前的ID(因为过程中文档的ID是一样的)
  155. /*if(result==12){ //12这种是OFFICE安装程序有误,可要获取以前的保存(建议注销保留)
  156. result = this.fileObjs.get(cn).getAttribute("value");
  157. }*/
  158. if(result>0){
  159. this.fileObjs.get(cn).setAttribute("value",result);
  160. this.hasSubmitOffices[cn]=true; //完成标志
  161. this.submitNewNum = this.submitNewNum + 1; //文档是提交了的数目 变化的(重新清空)
  162. }else{
  163. break; //文件上传失败
  164. }
  165. }
  166. }
  167. $.ligerDialog.closeWaitting(); //关闭提示
  168. }
  169. };
  170. //获取文件格式
  171. function sysFileType(fileId){
  172. var doctype = "doc";
  173. var path = __ctx +'/platform/system/sysFile/getFileType.ht';
  174. $.ajaxSetup({async:false}); //同步
  175. $.post(path,{fileId:fileId},function(data){
  176. doctype = data;
  177. });
  178. $.ajaxSetup({async:true}); //异步
  179. return doctype;
  180. };
  181. //获取用户
  182. function getDocUserData(){
  183. var user = OfficePlugin.user;
  184. var path = __ctx +'/platform/system/sysFile/getUserData.ht';
  185. $.ajaxSetup({async:false}); //同步
  186. $.post(path,{},function(data){
  187. if(data!=""){
  188. var obj = eval('(' + data + ')');
  189. if(obj.success){
  190. user = obj.user;
  191. }
  192. }
  193. });
  194. $.ajaxSetup({async:true}); //异步
  195. return user;
  196. };