service.replybox_wev8.js
17 KB
define("mService/replybox_html",function(){return'<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} <input type="file" name="file" single="single"/> </div> </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>'}),define("mService/replybox",["mUtil","mService","i18n"],function(l,s,a){var i,o,r,c,d,p,v,e,t,n,u,m={target:{tip:""},closeCallback:function(){l.back()}},f=window.outerHeight,h=window.innerHeight,w={scrollTargetIntoView:function(){var e=m.target.position,t=m.target.scroller;if(e&&t){var i=t.scrollTop(),a=e.offset().top,n=0;setTimeout(function(){(n=i+a-(f-o.height()-e.height()-3),l.isIOS())||(h=window.innerHeight,n+=f-h);t.scrollTop(n)},350)}},insertTextAfterFocus:function(e){if(e){var t=r[0];w.insertText(t,e),w.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),w.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}},g={toggleImgBarClass:function(){d.find(".wev-nreply-bar-item.picture")[0<b.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){g.scaleImgData(t,.5,.5,!0,function(e){b.state.imgs.push({data:t,uuid:l.UUID()}),d.find(".wev-nreply-bar-item.picture").find(".upload-img").remove(),b.initImgPanel()})}},y={init:function(){var i=this;e=v.find(".wev-nreply-selected-mask"),t=v.find(".wev-nreply-selected-content"),u=v.find(".selected-list-wrapper"),n=v.find(".wev-table-view"),e.on("click",function(){i.hide()}),t.find(".ok-btn").on("click",function(){i.hide()}),n.on("click",".delete",function(){var e=$(this).closest(".wev-table-view-cell"),t=e.index();e.remove(),b.state.attachs.splice(t,1),b.state.files.splice(t,1),0==b.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",b.state.attachs.push({name:i,size:t}),b.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])}),t.find(".upload-btn").on("change","input",function(e){e.stopPropagation();var t=this.files;t&&t[0]&&(a(t[0]),i.render())})},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:b.state.attachs});n.html(e),u.scrollTop(n.height())},show:function(){this.render(),v.show(),setTimeout(function(){t.removeClass("hide")},10)},hide:function(){t.addClass("hide"),setTimeout(function(){v.hide()},300)}},b={data:{},initState:function(e){return b.data[e]||this.resetState(e),b.data[e]},resetState:function(e){b.data[e]={text:"",atIds:[],imgs:[],documents:"",workflows:"",customers:"",projects:"",attachs:[],files:[]}},initEmojiPanel:function(){var e=w.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(b.state.imgs);t.length<9&&t.push({type:"picker"});var i={rows:w.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(),w.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()}),g.toggleImgBarClass()},initQuickImgAdd:function(){if(0==b.state.imgs.length){var e=d.find(".wev-nreply-bar-item.picture");0==e.find(".upload-img").length&&(l.checkEmpJsApi("chooseImage")?e.append('<div class="upload-img"></div>'):e.append('<input class="upload-img" type="file" name="file" accept="image/*" single="single"/>'))}},initImgPanelEvents:function(){p.on("click",".wev-nreply-img-remove",function(){var i,a=$(this).data("uuid");b.state.imgs.every(function(e,t){return e.uuid!=a||(i=t,!1)}),b.state.imgs.splice(i,1),b.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-b.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),g.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){g.photoProcess(e)}})}):g.photoProcess(t)},t.readAsDataURL(this.files[0])}})},initAddPanel:function(){var e=[{id:"document",text:a.DOCUMENT,selectedIds:b.state.documents},{id:"workflow",text:a.WORKFLOW,selectedIds:b.state.workflows},{id:"customer",text:a.CUSTOMER,selectedIds:b.state.customers},{id:"project",text:a.PROJECT,selectedIds:b.state.projects},{id:"attach",text:a.ATTACH,selectedIds:b.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")?b.state.attachs.length&&y.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:b.state[i],success:function(e,t){b.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=b.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(),w.insertTextAfterFocus(a),b.state.text=r[0].value}};if(m.target.atAll)s.show("hrmbrowser",{typeid:"17",browserType:"17",success:function(e,t){i(e,t)}});else{var e=m.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",splitPage:!1,browserType:"2",closeCallback:function(){l.back()},success:function(e,t){i(e,t)}})}}};return{mounted:function(e,t){if($.extend(m,t),!m.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=m.target.mainid+"_"+(m.target.replyid||"");b.state=b.initState(n);var s=function(){m.closeCallback()};i.on("click",function(){s()}),o.find(".wev-nreply-send").off("click").on("click",function(e){var t=$(this),i=l.utf16toEntities(r.val()).replace(/\n/gi,"<br>").replace(/\s/gi," ");if(!t.hasClass("wev-disabled")){t.addClass("wev-disabled");var a=new FormData;a.append("content",i),a.append("at",b.state.atIds.join(",")),a.append("imgs",b.state.imgs.map(function(e){return e.data}).join(";;")),a.append("documents",b.state.documents),a.append("workflows",b.state.workflows),a.append("customers",b.state.customers),a.append("projects",b.state.projects),b.state.files.forEach(function(e,t){a.append("attachs_"+t,e)}),m.onSubmit&&m.onSubmit(a,function(){b.resetState(n),s()})}}),r.on("input",function(){var e=this,t=this.lastValue||"";"@"==this.value.substring(t.length)&&b.openAtWindow(function(){e.value=t}),this.lastValue=this.value,this.lastStart=this.lastEnd=0,b.state.text=this.value,w.afterInput.call(this)}).on("focus",function(){this.lastStart&&(this.selectionStart=this.selectionEnd=this.lastStart,this.lastStart=this.lastEnd=0),w.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",m.target.tip).focus(),w.insertTextAfterFocus(b.state.text),g.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"),p.show(),e.hasClass("picture")||b.initQuickImgAdd(),e.hasClass("emoji")?b.initEmojiPanel():e.hasClass("picture")?b.initImgPanel():e.hasClass("add")?b.initAddPanel():e.hasClass("at")&&(b.openAtWindow(),p.hide()),w.scrollTargetIntoView()}),b.initQuickImgAdd(),b.initImgPanelEvents(),p.on("click",".wev-nreply-emoji-item",function(){w.insertText(r[0],$(this).html()),b.state.text=r[0].value,w.afterInput.call(r[0]),r.scrollTop(r[0].scrollHeight)}),y.init()}}}});