service.replybox_wev8.js
17.1 KB
define("mService/replybox_html",function(){return'<div class="page-content"> <div class="wev-nreply-mask"></div> <div class="wev-nreply-container"> <div class="wev-nreply-input"> <textarea type="text" name="hidden"/></textarea> <textarea type="text" name="content" placeholder="请输入"/></textarea> <div class="wev-nreply-send"></div> </div> <div class="wev-nreply-bar wev-flex"> <div class="wev-nreply-bar-item wev-flex-item emoji"> <div class="wev-nreply-bar-img"> <i class="icon"></i> </div> </div> <div class="wev-nreply-bar-item wev-flex-item picture"> <div class="wev-nreply-bar-img"> <i class="icon"></i> </div> </div> <div class="wev-nreply-bar-item wev-flex-item at"> <div class="wev-nreply-bar-img"> <i class="icon"></i> </div> </div> <div class="wev-nreply-bar-item wev-flex-item add"> <div class="wev-nreply-bar-img"> <i class="icon"></i> </div> </div> </div> <div class="wev-nreply-panel"> </div> </div> <div class="wev-nreply-selected-container"> <div class="wev-nreply-selected-mask"></div> <div class="wev-nreply-selected-content hide"> <div class="selected-header"> <div class="upload-btn"> $i18n{SELECT_FILE} </div> <input type="file" name="file" single="single"/> </div> <div class="selected-list-wrapper"> <ul class="wev-table-view"></ul> </div> <div class="selected-footer"> <div class="ok-btn">$i18n{SURE}</div> </div> </div> </div></div>'}),define("mService/replybox",["mUtil","mService","i18n"],function(l,s,a){var i,o,r,c,d,p,v,e,t,u,m,f={target:{tip:""},closeCallback:function(){l.back()}},h=window.outerHeight,w=window.innerHeight,g={scrollTargetIntoView:function(){var e=f.target.position,t=f.target.scroller;if(e&&t){var i=t.scrollTop(),a=e.offset().top,n=0;setTimeout(function(){(n=i+a-(h-o.height()-e.height()-3),l.isIOS())||(w=window.innerHeight,n+=h-w);t.scrollTop(n)},350)}},insertTextAfterFocus:function(e){if(e){var t=r[0];g.insertText(t,e),g.afterInput.call(t),r.scrollTop(r[0].scrollHeight),t.selectionStart=t.selectionEnd=t.lastStart}},insertText:function(e,t,i){var a=0,n=0;e.lastStart&&e.lastEnd?(a=e.lastStart,n=e.lastEnd):"number"==typeof e.selectionStart&&"number"==typeof e.selectionEnd?(a=e.selectionStart,n=e.selectionEnd):a=n=e.value.length;var s=e.value;e.value=s.substring(0,a)+t+s.substring(n,s.length),e.lastStart=e.lastEnd=a+t.length,e.lastValue=e.value},afterInput:function(){var e=$(this),t=e.val(),i=e.siblings("textarea");i.val(t),c[t?"addClass":"removeClass"]("wev-nreply-has-value");var a=i[0].scrollHeight;100<a&&(a=100),e.height(a),g.scrollTargetIntoView()},formatDatas:function(s,l,o){var r=[];return o.forEach(function(e,t){var i;if(0!=s){t%(s*l)==0&&r.push([]);var a=r[r.length-1];t%l==0&&a.push([]),i=a[a.length-1]}else t%l==0&&r.push([]),i=r[r.length-1];if(i.push(e),t==o.length-1&&i.length<l)for(var n=i.length;n<l;n++)i.push("")}),r}},y={toggleImgBarClass:function(){d.find(".wev-nreply-bar-item.picture")[0<x.state.imgs.length?"addClass":"removeClass"]("wev-nreply-point-red")},scaleImgData:function(e,o,r,t,c){var d="image/jpeg";if(e&&!t){var i=e.indexOf("data:"),a=e.indexOf(";");if(0===i&&i<a)try{d=e.substring("data:".length,a)}catch(e){d="image/jpeg"}}var p=new Image;p.onload=function(){var e=document.createElement("canvas"),t=p.naturalWidth,i=p.naturalHeight,a=parseInt(t*r),n=parseInt(i*r);e.width=a,e.height=n;var s=e.getContext("2d");s.clearRect(0,0,e.width,e.height),s.drawImage(p,0,0,a,n);var l=e.toDataURL(d,o);c.call(this,l)},p.src=e},photoProcess:function(t){y.scaleImgData(t,.5,.5,!0,function(e){x.state.imgs.push({data:t,uuid:l.UUID()}),x.initImgPanel()})},dataURLtoBlob:function(e){for(var t=e.split(","),i=t[0].match(/:(.*?);/)[1],a=atob(t[1]),n=a.length,s=new Uint8Array(n);n--;)s[n]=a.charCodeAt(n);return new Blob([s],{type:i})}},b={init:function(){var i=this;e=v.find(".wev-nreply-selected-mask"),t=v.find(".wev-nreply-selected-content"),m=v.find(".selected-list-wrapper"),u=v.find(".wev-table-view"),e.on("click",function(){i.hide()}),t.find(".ok-btn").on("click",function(){i.hide()}),u.on("click",".delete",function(){var e=$(this).closest(".wev-table-view-cell"),t=e.index();e.remove(),x.state.attachs.splice(t,1),x.state.files.splice(t,1),0==x.state.attachs.length&&p.find(".wev-nreply-relate-item.attach").removeClass("wev-nreply-point-red").find(".wev-nreply-relate-item-img").append('<input class="upload-attach" type="file" name="file" single="single"/>')});var a=function(e){var t,i=e.name,a=e.size;t=1048576<=a?(a/1024/1024).toFixed(2)+"M":1024<=a?Math.floor(a/1024)+"K":a+"B",x.state.attachs.push({name:i,size:t}),x.state.files.push(e),p.find(".wev-nreply-relate-item.attach").addClass("wev-nreply-point-red").find(".upload-attach").remove()};p.on("change","input.upload-attach",function(e){e.stopPropagation();var t=this.files;t&&t[0]&&a(t[0])});var n=t.find(".selected-header");n.on("change","input",function(e){e.stopPropagation();var t=this.files;t&&t[0]&&(a(t[0]),i.render(),$(this).remove(),n.append('<input type="file" name="file" single="single"/>'))})},render:function(){var e=l.parseTemplate(' {@each datas as d} <li class="wev-table-view-cell wev-media"> <div class="wev-media-body"> ${d.name} <div>${d.size}</div> <div class="delete"></div> </div> </li> {@/each} ',{datas:x.state.attachs});u.html(e),m.scrollTop(u.height())},show:function(){this.render(),v.show(),setTimeout(function(){t.removeClass("hide")},10)},hide:function(){t.addClass("hide"),setTimeout(function(){v.hide()},300)}},x={data:{},initState:function(e){return x.data[e]||this.resetState(e),x.data[e]},resetState:function(e){x.data[e]={text:"",atIds:[],imgs:[],documents:"",workflows:"",customers:"",projects:"",attachs:[],files:[]}},initEmojiPanel:function(){var e=g.formatDatas(3,7,["😀","😁","😂","😄","😅","😆","😇","😈","😉","😑","😒","😓","😔","😕","😖","😘","😡","😢","😣","😤","😨","😩","😰","😱","😲","😳","😴","😵","😶","😷","😊","😋","😌","😍","😎","😏","😚","😜","😝","😞","😧","😪","😫","😬","😭","😯","🎤","🎲","🎵","🏀","🏂","🏡","🀄","💡","💢","💣","💤","💩","💰","📚","📞","📢","🚿","🌏","🌻","🍚","🍫","🍻","💪","👊","👌","👏","👪","👫","👻","👼","👽","👿","💊","💋","💍","🔫","🙊","🙏","🌲","🌹","🍉","🍖","🍦","🍷","🎁","🎂","🎄","🎉","🎓","🐴","🐶","🐷","👑","💄","💔","🔥","🙈","🙉","🚀"]),t=l.parseTemplate(' <div class="wev-nreply-panel-container wev-nreply-emoji-panel"> <div class="wev-nreply-slide-wrap wev-comp-swipe-wrap"> {@each panels as panel,pindex} <div class="wev-nreply-slide wev-panel-hide"> <div class="wev-nreply-emoji-container"> {@each panel as row,pindex} <div class="wev-flex wev-nreply-emoji-row"> {@each row as col,pindex} <div class="wev-flex-item wev-nreply-emoji-item">$${decodeURIComponent(col)}</div> {@/each} </div> {@/each} </div> </div> {@/each} </div> <div class="wev-comp-swipe-point" {@if panels.length <= 1}style="display:none;"{@/if}> {@each panels as panel,index} <b class="{@if index == 0}curr-point{@/if}"></b> {@/each} </div> </div>',{panels:e});p.html(t).show();var i=o.find(".wev-nreply-panel-container"),a={continuous:!1,disableScroll:!0,stopPropagation:!1,callback:function(e,t){i.find(".wev-comp-swipe-point b").removeClass("curr-point").eq(e).addClass("curr-point")}};require(["swipe"],function(){Swipe(i[0],a,function(){i.find(".wev-panel-hide").removeClass("wev-panel-hide")})})},initImgPanel:function(e){var t=[].concat(x.state.imgs);t.length<9&&t.push({type:"picker"});var i={rows:g.formatDatas(0,3,t)};l.checkEmpJsApi("chooseImage")||(i.client="browser");var a=l.parseTemplate(' <div class="wev-nreply-panel-container wev-nreply-img-panel"> <div class="wev-nreply-img-wrapper"> {@each rows as row,index} <div class="wev-flex"> {@each row as col,pindex} <div class="wev-flex-item"> <div class="wev-nreply-img-item{@if col.type == "picker"} upload-img{@/if}"> {@if col.type == "picker"} {@if client == "browser"} <input class="upload-img" type="file" name="file" accept="image/*" single="single"/> {@/if} {@else if col.data} <div class="wev-nreply-img-remove" data-uuid="${col.uuid}"><i></i></div> <div class="wev-nreply-img-content"> <img src="${col.data}"> </div> {@/if} </div> </div> {@/each} </div> {@/each} </div> </div>',i);p.html(a).show(),g.scrollTargetIntoView();var n=p.height(),s=p.find(".wev-nreply-img-wrapper").height();e=null==e?s:e;p.find(".wev-nreply-img-panel").scrollTop(e),p.off("touchmove"),s<n&&p.on("touchmove",function(e){e.stopPropagation(),e.preventDefault()}),y.toggleImgBarClass()},initImgPanelEvents:function(){p.on("click",".wev-nreply-img-remove",function(){var i,a=$(this).data("uuid");x.state.imgs.every(function(e,t){return e.uuid!=a||(i=t,!1)}),x.state.imgs.splice(i,1),x.initImgPanel(p.find(".wev-nreply-img-panel").scrollTop())});var t=l.runtime.isWechat()&&!l.runtime.isWxwork();if(l.checkEmpJsApi("chooseImage")){!t&&require(["mApi/popup"]);var i=function(e){var t=9-x.state.imgs.length;em.chooseImage({count:t,sourceType:e,success:function(e){var t=e.localIds||[],n=function(e){e==t[t.length-1]&&Mobile_NS.hideLoader()};Mobile_NS.showLoader(),t.reduce(function(e,a){return(e=e||$.Deferred().resolve()).then(function(){return t=a,i=$.Deferred(),em.getLocalImgData({localId:t,success:function(e){i.resolve(),n(t),y.photoProcess("data:image/jpeg;base64,"+e.localData)},fail:function(e){i.resolve(),n(t),Mobile_NS.alert("getLocalImgData fail:"+JSON.stringify(e))}}),i;var t,i})},"")},fail:function(e){Mobile_NS.alert("chooseImage fail:"+JSON.stringify(e))}})};o.on("click","div.upload-img",function(e){t?i(["camera","album"]):Mobile_NS.footerMenu({iconPosition:"right",items:[{icon:"/mobilemode/mobile/images/plugin/camera.png",text:a.PHOTOGRAPH,callback:function(){i(["camera"])}},{icon:"/mobilemode/mobile/images/plugin/photo.png",text:a.SELECT_IMAGE,callback:function(){i(["album"])}}]}),e.stopPropagation()})}else l.isIOS()&&require(["ImageOrientationFix"]),o.on("change","input.upload-img",function(e){if(this.files&&this.files[0]){var t=new FileReader;t.onload=function(e){var t=e.target.result;l.isIOS()?require(["ImageOrientationFix"],function(){ImageOrientationFix({image:t,imgType:"base64",onFix:function(e){y.photoProcess(e)}})}):y.photoProcess(t)},t.readAsDataURL(this.files[0])}})},initAddPanel:function(){var e=[{id:"document",text:a.DOCUMENT,selectedIds:x.state.documents},{id:"workflow",text:a.WORKFLOW,selectedIds:x.state.workflows},{id:"customer",text:a.CUSTOMER,selectedIds:x.state.customers},{id:"project",text:a.PROJECT,selectedIds:x.state.projects},{id:"attach",text:a.ATTACH,selectedIds:x.state.attachs.length}],t=l.parseTemplate(' <div class="wev-nreply-panel-container wev-nreply-relate-panel"> <div class="wev-nreply-relate-list wev-clearfix"> {@each items as item} <div class="wev-nreply-relate-item ${item.id}{@if item.selectedIds} wev-nreply-point-red{@/if}"> <div class="wev-nreply-relate-item-img"> {@if item.id == "attach" && !item.selectedIds}<input class="upload-attach" type="file" name="file" single="single"/>{@/if} <i class="icon"></i> </div> <div class="wev-nreply-relate-item-text">${item.text}</div> </div> {@/each} </div> </div> ',{items:e});p.html(t).show(),p.off("touchmove").on("touchmove",function(e){e.stopPropagation(),e.preventDefault()}),p.find(".wev-nreply-relate-panel").on("click",".wev-nreply-relate-item",function(){var e,i,a=$(this);a.hasClass("attach")?x.state.attachs.length&&b.show():(a.hasClass("document")?(e="37",i="documents"):a.hasClass("workflow")?(e="152",i="workflows"):a.hasClass("customer")?(e="18",i="customers"):a.hasClass("project")&&(e="135",i="projects"),s.show("commonbrowser",{typeid:e,browserId:e,selectedIds:x.state[i],success:function(e,t){x.state[i]=e,a[e?"addClass":"removeClass"]("wev-nreply-point-red")}}))})},openAtWindow:function(n){r.blur();var i=function(e,t){if(e&&t){n&&n();var i=x.state.atIds;e.split(",").forEach(function(e){~i.indexOf(e)||i.push(e)});var a=t.split(",").reduce(function(e,t){return e+"@"+t+" "},"");r.focus(),setTimeout(function(){g.insertTextAfterFocus(a)},10),x.state.text=r[0].value}};if(f.target.atAll)s.show("hrmbrowser",{typeid:"17",browserType:"17",success:function(e,t){i(e,t)}});else{var e=f.target,t=l.jionActionUrl("com.api.mobilemode.web.mobile.browser.HrmBrowserAction","action=getAtUsers&modeid="+e.modeid+"&billid="+e.mainid);s.show("hrmbrowser/list",{customUrl:t,dataType:"atsome",browserType:"2",closeCallback:function(){l.back()},success:function(e,t){i(e,t)}})}}};return{mounted:function(e,t){if($.extend(f,t),!f.preload){i=e.find(".wev-nreply-mask"),o=e.find(".wev-nreply-container"),v=e.find(".wev-nreply-selected-container"),r=e.find("textarea[name='content']"),c=o.find(".wev-nreply-input"),d=o.find(".wev-nreply-bar"),p=o.find(".wev-nreply-panel");var n=f.compid+"_"+f.target.mainid+"_"+(f.target.replyid||"");x.state=x.initState(n);var s=function(){f.closeCallback()};i.on("click",function(){s()}),o.find(".wev-nreply-send").off("click").on("click",function(e){var t=$(this),i=r.val().trim().replace(/\n/gi,"<br>").replace(/\s/gi," ");if(!t.hasClass("wev-disabled")&&i){t.addClass("wev-disabled");var a=new FormData;a.append("content",i),a.append("at",x.state.atIds.join(",")),x.state.imgs.forEach(function(e,t){a.append("images_"+t,y.dataURLtoBlob(e.data))}),a.append("documents",x.state.documents),a.append("workflows",x.state.workflows),a.append("customers",x.state.customers),a.append("projects",x.state.projects),x.state.files.forEach(function(e,t){a.append("attachs_"+t,e)}),f.onSubmit&&f.onSubmit(a,function(){x.resetState(n),s()})}}),r.on("input",function(){var e=this,t=this.lastValue||"";"@"==this.value.substring(t.length)&&x.openAtWindow(function(){e.value=t}),this.lastValue=this.value,this.lastStart=this.lastEnd=0,x.state.text=this.value,g.afterInput.call(this)}).on("focus",function(){this.lastStart&&(this.selectionStart=this.selectionEnd=this.lastStart,this.lastStart=this.lastEnd=0),g.scrollTargetIntoView(),l.isIOS()&&setTimeout(function(){l.isFunction(document.body.scrollIntoView)&&r[0].scrollIntoView()},250),p.hide(),d.find(".wev-nreply-bar-item").removeClass("active")}).attr("placeholder",f.target.tip).focus(),g.insertTextAfterFocus(x.state.text),y.toggleImgBarClass(),i.on("touchmove",function(e){e.stopPropagation(),e.preventDefault()}),d.find(".wev-nreply-bar-item").on("click",function(){var e=$(this);d.find(".wev-nreply-bar-item").removeClass("active"),e.addClass("active"),e.hasClass("emoji")?x.initEmojiPanel():e.hasClass("picture")?x.initImgPanel():e.hasClass("add")?x.initAddPanel():e.hasClass("at")&&setTimeout(function(){x.openAtWindow(),p.hide()},300),g.scrollTargetIntoView()}),x.initImgPanelEvents(),p.on("click",".wev-nreply-emoji-item",function(){g.insertText(r[0],$(this).html()),x.state.text=r[0].value,g.afterInput.call(r[0]),r.scrollTop(r[0].scrollHeight)}),b.init()}}}});