OfficePlugin.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  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. var width=$(fileObj).css('width');
  53. var height=$(fileObj).css('height');
  54. width=(width==null || width=="0px")?"100%":width;
  55. height=(height==null || height=="0px")?"100%":height;
  56. width=width.endWith("%", false)?width:width +"px";
  57. height=height.endWith("%", false)?height:height +"px";
  58. if(doctype){
  59. doctype = doctype.toLowerCase();
  60. if(doctype=='pptx'){
  61. doctype='ppt';
  62. }else if(doctype=='docx'){
  63. doctype = 'doc';
  64. }else if(doctype=='xlsx'){
  65. doctype = 'xls';
  66. }
  67. }
  68. //容器的ID
  69. var divId="div_" + name.replaceAll(":","_");
  70. //容器样式修改
  71. var div_rq = $("#" + divId);
  72. if(!div_rq || div_rq.length<1){
  73. //如果找不到容器,则为表单生成模式,需要生成一个容器div
  74. div_rq = $('<div id="'+divId+'" class="office-div"></div>');
  75. $(fileObj).after(div_rq);
  76. }
  77. div_rq.css("width", width);
  78. div_rq.css("height", height);
  79. //字段权限
  80. var right=fileObj.getAttribute("right");
  81. if(!right||right==""){
  82. right="w";//默认可写
  83. }
  84. //默认菜单权限,全部功能打开
  85. var menuRight = {wjRight:'y',lhRight:'y',blhRight:'y',qchjRight:'y',mbthRight:'y',xzmbRight:'y',sxqmRight:'y',gzRight:'y',qpRight:'y',zcpdfRight:'y',ekeygzRight:'y',pdfgzRight:'y'};
  86. //字段对应的控件的菜单权限
  87. var menuRightStr = fileObj.getAttribute("menuRight");
  88. if(typeof(menuRightStr)!='undefined' && menuRightStr!=null && menuRightStr!=''){
  89. menuRightStr = menuRightStr.replace(/\'/g, '\"');
  90. menuRight = eval("(" +menuRightStr +")");
  91. }
  92. //有多少 个文档是可以做提交的
  93. if(right=="w"||right=="b"){
  94. //必填 已在其它处理
  95. if(right=="b"){
  96. var validRule = fileObj.getAttribute("validate");
  97. if ( validRule != null && 'undefined' != validRule.toLowerCase() && validRule.length>2 ){
  98. var json = eval('(' + validRule + ')');
  99. if(json.required){
  100. //不做操作
  101. }else{
  102. var jsonStr = validRule.substring(0, validRule.lastIndexOf('}'));
  103. jsonStr +=",\'required\':true}"; //加上必填
  104. fileObj.setAttribute("validate",jsonStr);
  105. }
  106. }else{
  107. fileObj.setAttribute("validate","{\'required\':true}"); //必填
  108. }
  109. }
  110. num++; //做可提交的标志数量
  111. }
  112. //没有权限,删除div容器。
  113. if(right=="no"){
  114. div_rq.remove();
  115. }else{ //有读和写的权限,加载控件。
  116. $.ligerDialog.waitting('正在加载OFFICE文档,请稍候...');
  117. //加载控件。
  118. var officeObj= new OfficeControl();
  119. this.officeObjs.push(officeObj);
  120. //加载office控件。
  121. officeObj.renderTo(divId,{fileId:fileId,doctype:doctype,myNum:myNum,right:right,user:this.user,menuRight:menuRight});
  122. //是否有office控件。
  123. this.hasOfficeFields.push(true);
  124. //office控件文档标志
  125. this.hasSubmitOffices.push(false);
  126. myNum++; //序号
  127. $.ligerDialog.closeWaitting();
  128. }
  129. }
  130. this.submitNum = num; //文档是可以做提交的数目 总娄
  131. this.submitNewNum = 0; //文档是提交了的数目 变化的(重新清空)
  132. },
  133. //提交文件保存。
  134. //如果有office控件。则保存后将返回的附件id放到隐藏域。
  135. submit:function(callBack){
  136. $.ligerDialog.waitting('正在保存OFFICE文档中,请稍候...');
  137. //每次提交,都需要清零
  138. this.submitNewNum = 0;
  139. // var _self=this;
  140. for ( var cn = 0; cn < this.officeObjs.length; cn++) {
  141. var officeObj= this.officeObjs[cn];
  142. if(!this.hasOfficeFields[cn]) return;
  143. var right=this.fileObjs.get(cn).getAttribute("right");
  144. if(callBack){
  145. this.callBack=callBack;
  146. }
  147. //可写,保存office内容并上传。
  148. if(right=="w"||right=="b"){
  149. //保存到服务器。
  150. var result=officeObj.saveRemote(cn);
  151. if(result==-11){
  152. //由 火狐谷歌浏览器控件文档保存事件(异步的,IE是同步的)回调接管函数 OfficeControl.js 中有 saveToURLOnComplete 处理
  153. }else if(result==-13){
  154. //由 火狐谷歌浏览器控件文档保存事件报错不能由回调接管函数 OfficeControl.js 中有 saveToURLOnComplete 处理 ,直接 在这里处理
  155. //下面处理的是如果没安装控件,也可以正常提交表单(建议注销保留)
  156. /*result = this.fileObjs.get(cn).getAttribute("value"); //保存到对象的值;
  157. if(result>0){
  158. officeObj.config.fileId = result; //控件中config对象的fileId
  159. this.fileObjs.get(cn).setAttribute("value",result);
  160. this.hasSubmitOffices[cn]=true; //完成标志
  161. this.submitNewNum = this.submitNewNum + 1; //文档是提交了的数目 变化的(重新清空)
  162. if(this.submitNum == this.submitNewNum){ //当提交问题 等于 提交数量的变量 时 表示所有文档 都提交了 然后做 业务相关的提交
  163. var data=CustomForm.getData();
  164. //设置表单数据
  165. $("#formData").val(data);
  166. $('#frmWorkFlow').submit();
  167. this.submitNewNum = 0; //重置 提交数量的变量
  168. }else{
  169. if(cn==this.officeObjs.length){
  170. $.ligerDialog.warn("提交失败,OFFICE控件没能正常使用,请重新安装 !!!","提示");
  171. }
  172. }
  173. }else{
  174. $.ligerDialog.warn("提交失败,OFFICE控件没能正常使用,请重新安装 !!!","提示");
  175. break
  176. }*/
  177. //$.ligerDialog.warn("提交失败,OFFICE控件没能正常使用,请重新安装 !!!","提示");
  178. alert("提交失败,OFFICE控件没能正常使用,请重新安装 !!!");
  179. break;
  180. }else{
  181. //将结果放到隐藏域。(同步的 处理方法 IE 360 等)
  182. //如果返回的是错误的内容,就保存以前的ID(因为过程中文档的ID是一样的)
  183. /*if(result==12){ //12这种是OFFICE安装程序有误,可要获取以前的保存(建议注销保留)
  184. result = this.fileObjs.get(cn).getAttribute("value");
  185. }*/
  186. if(result>0){
  187. this.fileObjs.get(cn).setAttribute("value",result);
  188. this.hasSubmitOffices[cn]=true; //完成标志
  189. this.submitNewNum = this.submitNewNum + 1; //文档是提交了的数目 变化的(重新清空)
  190. }else{
  191. break; //文件上传失败
  192. }
  193. }
  194. }else{
  195. this.hasSubmitOffices[cn]=true; //完成标志
  196. }
  197. }
  198. $.ligerDialog.closeWaitting(); //关闭提示
  199. }
  200. };
  201. //获取文件格式
  202. function sysFileType(fileId){
  203. var doctype = "doc";
  204. var path = __ctx +'/platform/system/sysFile/getFileType.ht';
  205. $.ajaxSetup({async:false}); //同步
  206. $.post(path,{fileId:fileId},function(data){
  207. doctype = data;
  208. });
  209. $.ajaxSetup({async:true}); //异步
  210. return doctype;
  211. };
  212. //获取用户
  213. function getDocUserData(){
  214. var user = OfficePlugin.user;
  215. var path = __ctx +'/platform/system/sysFile/getUserData.ht';
  216. $.ajaxSetup({async:false}); //同步
  217. $.post(path,{},function(data){
  218. if(data!=""){
  219. var obj = eval('(' + data + ')');
  220. if(obj.success){
  221. user = obj.user;
  222. }
  223. }
  224. });
  225. $.ajaxSetup({async:true}); //异步
  226. return user;
  227. };