vxe-pc-ui
Version:
A vue based PC component library
1 lines • 7.83 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_ui=require("../../ui"),_xeUtils=_interopRequireDefault(require("xe-utils")),_dom=require("../..//ui/src/dom");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var _default=exports.default=(0,_vue.defineComponent)({name:"VxeImagePreview",props:{modelValue:Number,urlList:Array,urlField:{type:String,default:()=>(0,_ui.getConfig)().imagePreview.urlField},maskClosable:{type:Boolean,default:()=>(0,_ui.getConfig)().imagePreview.maskClosable},marginSize:{type:String,default:()=>(0,_ui.getConfig)().imagePreview.marginSize},showPrintButton:{type:Boolean,default:()=>(0,_ui.getConfig)().imagePreview.showPrintButton},showDownloadButton:{type:Boolean,default:()=>(0,_ui.getConfig)().imagePreview.showDownloadButton},beforeDownloadMethod:Function,downloadMethod:Function},emits:["update:modelValue","change","download","download-fail","close"],setup(r,e){const a=e["emit"];var t=_xeUtils.default.uniqueId();const i=(0,_vue.ref)(),o={refElem:i},c=(0,_vue.reactive)({activeIndex:r.modelValue||0,offsetPct11:!1,offsetScale:0,offsetRotate:0,offsetLeft:0,offsetTop:0}),s=(0,_vue.computed)(()=>r.urlField||"url"),_=(0,_vue.computed)(()=>_xeUtils.default.toNumber(r.marginSize||0)||16),u=(0,_vue.computed)(()=>{var e=c["offsetRotate"];return e?e+"°":"0°"}),n=(0,_vue.computed)(()=>{var e=c["offsetScale"];return e?_xeUtils.default.ceil(100*(1+e))+"%":"100%"}),l=(0,_vue.computed)(()=>{var e=r["urlList"];const t=s.value;return e&&e.length?e.map(e=>_xeUtils.default.isString(e)?e:e[t]||""):[]}),v=(0,_vue.computed)(()=>{var{offsetScale:e,offsetRotate:o,offsetLeft:a,offsetTop:i}=c,s=[];let u=1;if(e&&(u=1+e,s.push(`scale(${u})`)),o&&s.push(`rotate(${o}deg)`),a||i){let e=a/=u,t=i/=u;if(o)switch(o%360){case 90:case-270:e=i,t=-a;break;case 180:case-180:e=-a,t=-i;break;case 270:case-90:e=-i,t=a}s.push(`translate(${e}px, ${t}px)`)}return s.length?s.join(" "):""}),d={computeImgList:l},f={xID:t,props:r,context:e,reactData:c,getRefMaps:()=>o,getComputeMaps:()=>d},m=(e,t,o)=>{a(e,(0,_ui.createEvent)(o,{$imagePreview:f},t))};t={dispatchEvent:m};const p=e=>{c.activeIndex=e,a("update:modelValue",e)},g=e=>{m("close",{},e)};const h=()=>{var e=i.value;(0,_dom.removeClass)(e,"is--move"),Object.assign(c,{offsetPct11:!1,offsetScale:0,offsetRotate:0,offsetLeft:0,offsetTop:0})},E=()=>{var e=c["offsetScale"];let t=.02;return t=-.6<=e&&(t=.04,-.4<=e)&&(t=.07,0<=e)&&(t=.1,3<=e)&&(t=.25,8<=e)&&(t=.4,16<=e)&&(t=.6,24<=e)&&(t=.9,32<=e)&&(t=1.3,39<=e)&&(t=1.9,45<=e)?2.5:t},w=e=>{var t=c["offsetScale"],o=E();c.offsetScale=e?Number(Math.min(49,t+o).toFixed(2)):Number(Math.max(-.9,t-o).toFixed(2))},x=e=>{let t=c.activeIndex||0;var o=l.value;e?t>=o.length-1?t=0:t++:t<=0?t=o.length-1:t--,h(),c.activeIndex=t,p(t)},I=e=>{let t=c.offsetRotate;e?t+=90:t-=90,c.offsetRotate=t},b=()=>{var e=c["activeIndex"],e=l.value[e||0];_ui.VxeUI.print&&_ui.VxeUI.print({align:"center",pageBreaks:[{bodyHtml:`<img src="${e}" style="max-width:100%;max-height:100%;">`}]})},P=(e,t)=>{m("download",{url:t},e)},R=a=>{const i=c["activeIndex"];const s=l.value[i||0];var e=r.beforeDownloadMethod||(0,_ui.getConfig)().imagePreview.beforeDownloadMethod;const u=r.downloadMethod||(0,_ui.getConfig)().imagePreview.downloadMethod;Promise.resolve(!e||e({$imagePreview:f,url:s,index:i||0})).then(e=>{var t,o;e&&(u?Promise.resolve(u({$imagePreview:f,url:s,index:i||0})).then(()=>{P(a,s)}).catch(e=>e):(t=a,o=s,_ui.VxeUI.saveFile&&fetch(o).then(e=>e.blob().then(e=>{_ui.VxeUI.saveFile({filename:o,content:e}),P(t,o)})).catch(()=>{_ui.VxeUI.modal&&_ui.VxeUI.modal.message({content:(0,_ui.getI18n)("vxe.error.downErr"),status:"error"})})))})},V=(e,t)=>{var o=c["activeIndex"];if(l.value[o||0])switch(t){case"zoomOut":w(!1);break;case"zoomIn":w(!0);break;case"pctFull":h();break;case"pct11":h(),c.offsetPct11=!0;break;case"rotateLeft":I(!1);break;case"rotateRight":I(!0);break;case"print":b();break;case"download":R(e)}},L=e=>{e=e.deltaY;0<e?w(!1):e<0&&w(!0)},C=e=>{const{offsetTop:s,offsetLeft:u}=c,r=i.value,t=(e.preventDefault(),document.onmousemove),o=document.onmouseup,n=e.pageX,l=e.pageY,v=_.value;document.onmousemove=e=>{var{pageX:t,pageY:o}=e,{visibleHeight:a,visibleWidth:i}=(0,_dom.getDomNode)();e.preventDefault(),(0,_dom.addClass)(r,"is--move"),t>v&&o>v&&t<i-v&&o<a-v&&(c.offsetLeft=u+t-n,c.offsetTop=s+o-l)},document.onmouseup=()=>{document.onmousemove=t,document.onmouseup=o,(0,_dom.removeClass)(r,"is--move")}},M=e=>{var t=e.ctrlKey,o=e.shiftKey,a=_ui.globalEvents.hasKey(e,_ui.GLOBAL_EVENT_KEYS.ARROW_UP),i=_ui.globalEvents.hasKey(e,_ui.GLOBAL_EVENT_KEYS.ARROW_DOWN),s=_ui.globalEvents.hasKey(e,_ui.GLOBAL_EVENT_KEYS.ARROW_LEFT),u=_ui.globalEvents.hasKey(e,_ui.GLOBAL_EVENT_KEYS.ARROW_RIGHT),r=_ui.globalEvents.hasKey(e,_ui.GLOBAL_EVENT_KEYS.R),n=_ui.globalEvents.hasKey(e,_ui.GLOBAL_EVENT_KEYS.P);a?(e.preventDefault(),o?--c.offsetTop:w(!0)):i?(e.preventDefault(),o?c.offsetTop+=1:w(!1)):s?(e.preventDefault(),o?--c.offsetLeft:x(!1)):u?(e.preventDefault(),o?c.offsetLeft+=1:x(!0)):r&&t?(e.preventDefault(),o?I(!1):I(!0)):n&&t&&(e.preventDefault(),b())},O=e=>{r.maskClosable&&e.target===e.currentTarget&&m("close",{},e)},T=(Object.assign(f,t,{}),(t,e)=>(0,_vue.h)("div",{class:"vxe-image-preview--operation-btn",title:(0,_ui.getI18n)("vxe.imagePreview.operBtn."+t),onClick(e){V(e,t)}},[(0,_vue.h)("i",{class:(0,_ui.getIcon)()[e]})]));e=()=>{var e=c["offsetPct11"];return(0,_vue.h)("div",{ref:i,class:["vxe-image-preview",{"is--pct11":e}],onWheel:L},[(()=>{const o=c["activeIndex"];var e=l.value;const a=v.value;return(0,_vue.h)("div",{class:"vxe-image-preview--img-list",onClick:O},e.map((e,t)=>{t=o===t;return(0,_vue.h)("img",{class:["vxe-image-preview--img-item",{"is--active":t}],src:e,style:t?{transform:a}:null,onMousedown(e){C(e)}})}))})(),(()=>{var{showPrintButton:e,showDownloadButton:t}=r,o=c["activeIndex"],a=l.value,i=u.value,s=n.value;return(0,_vue.h)("div",{class:"vxe-image-preview--btn-wrapper"},[(0,_vue.h)("div",{class:"vxe-image-preview--close-wrapper"},[(0,_vue.h)("div",{class:"vxe-image-preview--close-btn",onClick:g},[(0,_vue.h)("i",{class:(0,_ui.getIcon)().IMAGE_PREVIEW_CLOSE})]),(0,_vue.h)("div",{class:"vxe-image-preview--close-bg"})]),1<a.length?(0,_vue.h)("div",{class:"vxe-image-preview--previous-btn",onClick(){x(!1)}},[(0,_vue.h)("i",{class:(0,_ui.getIcon)().IMAGE_PREVIEW_PREVIOUS})]):(0,_vue.createCommentVNode)(),1<a.length?(0,_vue.h)("div",{class:"vxe-image-preview--next-btn",onClick(){x(!0)}},[(0,_vue.h)("i",{class:(0,_ui.getIcon)().IMAGE_PREVIEW_NEXT})]):(0,_vue.createCommentVNode)(),(0,_vue.h)("div",{class:"vxe-image-preview--operation-info"},[(0,_vue.h)("div",{class:"vxe-image-preview--operation-deg"},i),(0,_vue.h)("div",{class:"vxe-image-preview--operation-pct"},s)]),(0,_vue.h)("div",{class:"vxe-image-preview--operation-wrapper"},[(0,_vue.h)("div",{class:"vxe-image-preview--operation-active-count"},[(0,_vue.h)("span",{class:"vxe-image-preview--operation-active-current"},""+((o||0)+1)),(0,_vue.h)("span",{class:"vxe-image-preview--operation-active-total"},"/"+a.length)]),T("zoomOut","IMAGE_PREVIEW_ZOOM_OUT"),T("zoomIn","IMAGE_PREVIEW_ZOOM_IN"),T("pctFull","IMAGE_PREVIEW_PCT_FULL"),T("pct11","IMAGE_PREVIEW_PCT_1_1"),T("rotateLeft","IMAGE_PREVIEW_ROTATE_LEFT"),T("rotateRight","IMAGE_PREVIEW_ROTATE_RIGHT"),e?T("print","IMAGE_PREVIEW_PRINT"):(0,_vue.createCommentVNode)(),t?T("download","IMAGE_PREVIEW_DOWNLOAD"):(0,_vue.createCommentVNode)()])])})()])};return(0,_vue.watch)(()=>r.modelValue,e=>{c.activeIndex=e,h()}),(0,_vue.onMounted)(()=>{_ui.globalEvents.on(f,"keydown",M)}),(0,_vue.onBeforeUnmount)(()=>{var e=i.value;e&&(0,_dom.removeClass)(e,"is--move")}),(0,_vue.onUnmounted)(()=>{_ui.globalEvents.off(f,"keydown")}),(0,_vue.provide)("$xeImagePreview",f),f.renderVN=e}});