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,["&#128512;","&#128513;","&#128514;","&#128516;","&#128517;","&#128518;","&#128519;","&#128520;","&#128521;","&#128529;","&#128530;","&#128531;","&#128532;","&#128533;","&#128534;","&#128536;","&#128545;","&#128546;","&#128547;","&#128548;","&#128552;","&#128553;","&#128560;","&#128561;","&#128562;","&#128563;","&#128564;","&#128565;","&#128566;","&#128567;","&#128522;","&#128523;","&#128524;","&#128525;","&#128526;","&#128527;","&#128538;","&#128540;","&#128541;","&#128542;","&#128551;","&#128554;","&#128555;","&#128556;","&#128557;","&#128559;","&#127908;","&#127922;","&#127925;","&#127936;","&#127938;","&#127969;","&#126980;","&#128161;","&#128162;","&#128163;","&#128164;","&#128169;","&#128176;","&#128218;","&#128222;","&#128226;","&#128703;","&#127759;","&#127803;","&#127834;","&#127851;","&#127867;","&#128170;","&#128074;","&#128076;","&#128079;","&#128106;","&#128107;","&#128123;","&#128124;","&#128125;","&#128127;","&#128138;","&#128139;","&#128141;","&#128299;","&#128586;","&#128591;","&#127794;","&#127801;","&#127817;","&#127830;","&#127846;","&#127863;","&#127873;","&#127874;","&#127876;","&#127881;","&#127891;","&#128052;","&#128054;","&#128055;","&#128081;","&#128132;","&#128148;","&#128293;","&#128584;","&#128585;","&#128640;"]),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,"&nbsp;");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()}}}});