@cloud-print/uni-utils 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=function(e){return e.LOW=`low`,e.MEDIUM=`medium`,e.HIGH=`high`,e}({});function t(e){let{windowWidth:t}=uni.getWindowInfo();return 750/t*e}function n(e){let{windowWidth:t}=uni.getWindowInfo();return t/750*e}function r(e,t=`rpx`){return`${e}${t}`}function i({to:e,from:t,sources:n}){let r=e/t;return n.map(e=>e*r)}function a({targetRpx:e,base:t=`width`,widthPx:n,heightPx:r}){let i=t===`width`?e/n:e/r,a=e=>e*i;return{width:a(n),height:a(r),px:a,ratio:i}}function o(e,t){return Math.round(e/25.4*t)}function s(e,t,n){return{width:o(e,n),height:o(t,n)}}function c(e){let[t,n]=i({from:210,to:e,sources:[210,297]});return{width:t,height:n}}exports.A4_HEIGHT=297,exports.A4_WIDTH=210,exports.DeviceLevel=e,exports.addUnit=r,exports.getA4Size=c,exports.getDpiSize=s,exports.mmToPx=o,exports.px2rpx=t,exports.resize=i,exports.rpx2px=n,exports.transform=a;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));let c=require("lodash-es"),l=require("qs");l=s(l);let u=require("decimal.js");u=s(u);let d=require("dayjs");d=s(d);let ee=function(e){return e.LOW=`low`,e.MEDIUM=`medium`,e.HIGH=`high`,e}({});const f=new Map,{platform:te}=uni.getDeviceInfo(),ne=e=>{let t=e.split(`.`).pop();return`${wx.env.USER_DATA_PATH}/${(0,c.uniqueId)(`image-cache-file`)}.${t}`},p=e=>e.includes(`?`)?e+`&t=`+Date.now():e+`?t=`+Date.now(),m=(e,t)=>new Promise((n,r)=>{let i=t;if(te===`android`){if(t.startsWith(`https`)||t.startsWith(`http`))i=p(t);else{var a;let e=uni.getFileSystemManager();i=ne(t),f.has(t)||f.set(t,[]),(a=f.get(t))==null||a.push(i),e.copyFileSync(t,i)}}let o=e.createImage();o.onload=()=>n(o),o.onerror=e=>r(e),o.src=i}),h=()=>{let e=uni.getFileSystemManager();f.values().forEach(t=>{t.forEach(t=>{e.unlink({filePath:t,fail:e=>{console.error(`unlink fail`,t,e)}})})}),f.clear()},g=(e,t=1,n=`tmp.png`)=>{let r=e.toDataURL(`image/png`,t).replace(/^data:image\/\w+;base64,/,``),i=uni.base64ToArrayBuffer(r),a=`${wx.env.USER_DATA_PATH}/${n}`;return uni.getFileSystemManager().writeFileSync(a,i,`binary`),a},re=e=>`data:image/png;base64,${e.replace(/^data:image\/\w+;base64,/,``).replace(/[\r\n]/g,``)}`,ie=(e,t)=>new Promise((n,r)=>{let i=e.createImage();i.onload=()=>n(i),i.onerror=e=>r(e),i.src=t}),ae=async(e,t={})=>{let{compInst:n,quality:r=100,backgroundColor:i}=t,a=re(e),o=uni.createOffscreenCanvas({type:`2d`,width:1,height:1,compInst:n}),s=await ie(o,a),{width:c,height:l}=s;o.width=c,o.height=l;let u=o.getContext(`2d`);i&&(u.fillStyle=i,u.fillRect(0,0,c,l)),u.fillRect(0,0,c,l),u.drawImage(s,0,0,c,l);let{tempFilePath:d}=await uni.canvasToTempFilePath({canvas:o,quality:r});return d},oe=async e=>{let{tempFilePath:t}=await uni.downloadFile({url:e});await uni.saveImageToPhotosAlbum({filePath:t})},se=e=>{let t=uni.getFileSystemManager();return new Promise((n,r)=>{t.getFileInfo({filePath:e,success:e=>{n(e.size)},fail:e=>{r(e)}})})};function ce(e){return e?e.length===11?e.slice(0,3)+`****`+e.slice(7):e:``}const _=/^\d{11}$/;function le(e){return e?_.test(e):!1}function ue(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.includes(r))continue;n[r]=e[r]}return n}function de(e,t){if(e==null)return{};var n,r,i=ue(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.includes(n)||{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function v(e){"@babel/helpers - typeof";return v=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},v(e)}function fe(e,t){if(v(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(v(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function pe(e){var t=fe(e,`string`);return v(t)==`symbol`?t:t+``}function me(e,t,n){return(t=pe(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function b(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?y(Object(n),!0).forEach(function(t){me(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):y(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}const x=[`x-oss-process`],S=(e,t)=>e+`?x-oss-process=image/format,`+t,C=e=>{let t=[];return e.p&&t.push(`p_${e.p}`),e.w&&t.push(`w_${e.w}`),e.h&&t.push(`h_${e.h}`),e.m&&t.push(`m_${e.m}`),e.l&&t.push(`l_${e.l}`),e.s&&t.push(`s_${e.s}`),e.limit&&t.push(`limit_${e.limit}`),e.color&&t.push(`color_${e.color}`),t.join(`,`)},w=(e,t)=>`${e}?x-oss-process=image/resize,${C(t)}`,T=e=>e.angle,E=(e,t)=>`${e}?x-oss-process=image/rotate,${T(t)}`;function D(e){let t=e.slice(e.indexOf(`/`)+1);return t?t.split(`/`).reduce((e,t)=>{let[n,...r]=t.split(`,`);if([`resize`].includes(n)){let t={};r.forEach(e=>{let[n,r]=e.split(`_`);t[n]=Number(r)}),e.resize=t}else e[n]=/^\d+$/.test(r[0])?Number(r[0]):r[0];return e},{}):{}}function O(e){let[t,n]=e.split(`?`),r=l.default.parse(n),{"x-oss-process":i}=r,a=de(r,x);return{url:t,ossProcessProps:i?D(i):{},restProps:a}}function k(e){let t=[`image`];return e.format&&t.push(`/format,${e.format.toLowerCase()}`),e.resize&&t.push(`/resize,${C(e.resize)}`),e.rotate&&t.push(`/rotate,${T({angle:e.rotate})}`),e.quality&&t.push(`/quality,q_${e.quality}`),t.join(``)}const A=(e,t)=>{let{url:n,ossProcessProps:r,restProps:i}=O(e),a=b({"x-oss-process":k(b(b({},r),t))},i);return`${n}?${l.default.stringify(a)}`},j=(e,t)=>{let n=[];return t.format&&n.push(`/format,${t.format.toLowerCase()}`),t.resize&&n.push(`/resize,${C(t.resize)}`),t.rotate&&n.push(`/rotate,${T(t.rotate)}`),`${e}?x-oss-process=image${n.join(``)}`},M=e=>{var t,n,r,i,a,o,s,l;return(0,c.omitBy)({fileSize:Number((t=e.FileSize)==null?void 0:t.value),format:(n=e.Format)==null?void 0:n.value,frameCount:Number((r=e.FrameCount)==null?void 0:r.value),imageWidth:Number((i=e.ImageWidth)==null?void 0:i.value),imageHeight:Number((a=e.ImageHeight)==null?void 0:a.value),resolutionUnit:(o=e.ResolutionUnit)==null?void 0:o.value,xResolution:(s=e.XResolution)==null?void 0:s.value,yResolution:(l=e.YResolution)==null?void 0:l.value},c.isUndefined)},N=async e=>new Promise((t,n)=>{uni.request({url:`${e}?x-oss-process=image/info`,method:`GET`,dataType:`json`,success:e=>{e.statusCode===200?t(M(e.data)):n(Error(`Failed to get image info: ${e.statusCode}`))},fail:e=>{n(e)}})});function P(e){return require.async(e)}function F(e){let{windowWidth:t}=uni.getWindowInfo();return 750/t*e}function I(e){let{windowWidth:t}=uni.getWindowInfo();return t/750*e}function L(e,t=`rpx`){return`${e}${t}`}function R({to:e,from:t,sources:n}){let r=e/t;return n.map(e=>e*r)}function z({targetRpx:e,base:t=`width`,widthPx:n,heightPx:r}){let i=t===`width`?e/n:e/r,a=e=>e*i;return{width:a(n),height:a(r),px:a,ratio:i}}function B(e,t){return Math.round(e/25.4*t)}function he(e,t,n){return{width:B(e,n),height:B(t,n)}}const ge=e=>e===void 0?0:U(e,100),_e=e=>(0,c.isUndefined)(e)?0:V(e,100),V=(e,t)=>(0,c.isUndefined)(e)||(0,c.isUndefined)(t)?0:new u.default(e).mul(t).toNumber(),ve=(e,...t)=>{let n=new u.default(e);return t.forEach(e=>{n=n.sub(e)}),n.toNumber()},H=(e,...t)=>{let n=new u.default(e);return t.forEach(e=>{n=n.add(e)}),n.toNumber()},U=(e,t)=>(0,c.isUndefined)(e)||(0,c.isUndefined)(t)||Number(t)===0?0:new u.default(e).div(t).toNumber();var ye={add:H,sub:ve,multiply:V,div:U,avg:(e,...t)=>{let n=H(e,...t);return U(n,t.length+1)}};function be(e,t){typeof e==`string`?uni.navigateTo({url:e,params:t}):uni.navigateTo(e)}function W(e){return e.startsWith(`/`)?e:`/${e}`}function xe(e){let t=getCurrentPages(),n=W(e.listPage),r=W(e.firstPage),i=t.map(e=>W(e.route)),a=i.findIndex(e=>e===n);if(a!==-1)uni.navigateBack({delta:t.length-a-1});else{let e=i.findIndex(e=>e===r);e===-1?uni.navigateTo({url:r}):(uni.navigateBack({delta:t.length-e}),setTimeout(()=>{uni.navigateTo({url:n})},500))}}function Se(e,t=!1){return e<1e3?t?`${Math.round(e)}米`:`${Math.round(e)}m`:t?`${(e/1e3).toFixed(1)}千米`:`${(e/1e3).toFixed(1)}km`}function Ce(e,t,n){for(let n of t)if(e.includes(n))return n;return n==null?t[t.length-1]:n}async function we(e){try{await uni.setClipboardData({data:e})}catch(e){throw uni.showModal({title:`复制失败`,content:JSON.stringify(e),showCancel:!1}),e}}const Te=()=>{uni.hideLoading({fail:()=>{}})},G={high:.62,medium:.38},K={benchmark:.45,memory:.35,system:.2},q={memory:.6,system:.4};function J(){return uni.getDeviceInfo()}function Ee(){let{benchmarkLevel:e}=J();if(e!==void 0)return e;let{benchmarkLevel:t}=uni.getSystemInfoSync();return t}function De(e){if(!e)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function Y(e,t){if(t===`ios`){let t=e.match(/iOS\s+(\d+)/i);return t?Number(t[1]):void 0}if(t===`android`||t===`ohos`){let t=e.match(/Android\s+(\d+)/i);return t?Number(t[1]):void 0}}function Oe(e){if(e<=0)return 0;if(!(e<0))return Math.min(1,(e-1)/49)}function ke(e){return Math.min(1,Math.max(0,(e-2048)/10240))}function Ae(e){return e>=17?1:e>=15?.85:e>=13?.6:e>=11?.4:.2}function je(e){return e>=13?1:e>=10?.7:e>=8?.45:.2}function Me(e,t){return e===`ios`?Ae(t):e===`android`||e===`ohos`?je(t):.5}function Ne(e){let t=[],n=e.benchmark!==void 0;if(e.benchmark!==void 0&&t.push({score:e.benchmark,weight:K.benchmark}),e.memory!==void 0&&t.push({score:e.memory,weight:n?K.memory:q.memory}),e.system!==void 0&&t.push({score:e.system,weight:n?K.system:q.system}),t.length===0)return .5;let r=t.reduce((e,t)=>e+t.weight,0);return t.reduce((e,t)=>e+t.score*t.weight,0)/r}function Pe(e){return e>=G.high?`high`:e>=G.medium?`medium`:`low`}function Fe(e,t,n){return t!==void 0&&t<=0||n!==void 0&&n<2048?`low`:e===`high`&&n!==void 0&&n<4096&&(t===void 0||t<0)?`medium`:e}function Ie(e,t,n,r){let i={};if(n!==void 0){let e=Oe(n);e!==void 0&&(i.benchmark=e)}r!==void 0&&(i.memory=ke(r));let a=Y(t,e);return a!==void 0&&(i.system=Me(e,a)),i}function X(){let{platform:e,system:t,memorySize:n}=J();if(e===`devtools`)return{platform:e,scores:{benchmark:1,memory:1,system:1},compositeScore:1,level:`high`};let r=Ee(),i=De(n),a=Ie(e,t,r,i),o=Ne(a),s=Pe(o);s=Fe(s,r,i);let c={platform:e,benchmarkLevel:r,memoryMb:i,systemMajor:Y(t,e),scores:a,compositeScore:o,level:s};return uni.getAccountInfoSync().miniProgram.envVersion!==`release`&&(console.log(`------------- device perf metrics -------------`),Object.entries(c).forEach(([e,t])=>{console.log(`${e}: ${JSON.stringify(t)}`)}),console.log(`------------- device perf metrics -------------`)),c}function Le(){return X().level}function Re(e,t){return e.replace(/\${(.+?)}/g,(e,n)=>(0,c.get)(t,n,e))}function ze(e){var t;if(e){if(`logisticsShipList`in e){var n;return b(b({},e),{},{logisticsShipList:Be([...e.logisticsShipList]),logisticsList:Z([...(n=e.logisticsList)==null?[]:n])})}return b(b({},e),{},{logisticsList:Z([...(t=e.logisticsList)==null?[]:t])})}}function Be(e){return e.sort((e,t)=>(0,d.default)(t.logisticsTime).diff((0,d.default)(e.logisticsTime)))}function Z(e){return e.map(e=>b(b({},e),{},{dataList:Ve(e.dataList)}))}function Ve(e){return e.sort((e,t)=>(0,d.default)(t.time).diff((0,d.default)(e.time)))}const He={0:`在途`,1:`揽收`,2:`疑难`,3:`签收`,4:`退签`,5:`派件`,8:`清关`,14:`拒签`};function Q(e){var t;return(t=He[e])==null?`未知`:t}function Ue(e){let[t,n]=R({from:210,to:e,sources:[210,297]});return{width:t,height:n}}function We(e){return e.split(`,`).reduce((e,t)=>{let[n,r]=t.split(`-`);return r===void 0?e.concat(Number(n)):e.concat((0,c.range)(Number(n),Number(r)+1))},[])}function Ge(e){return e.reduce((t,n,r)=>(t.length===0?t.push({start:n,end:n}):n===e[r-1]+1?t[t.length-1].end=n:t.push({start:n,end:n}),t),[]).map(e=>e.start===e.end?String(e.start):`${e.start}-${e.end}`).join(`,`)}function Ke(e){return e.length>8?`${e.substring(0,8)}...`:e}function qe(e){return e.split(`,`).reduce((e,t)=>{let[n,r]=t.split(`-`);return r===void 0?e+1:e+(Number(r)-Number(n)+1)},0)}const Je=e=>e.join(`\r
2
+ `);function Ye(){let{platform:e}=uni.getDeviceInfo();return[`windows`,`mac`].includes(e)}const $=({message:e,mask:t,icon:n,delay:r,duration:i})=>new Promise((a,o)=>{let s=(0,c.omitBy)({title:e,icon:n,mask:t,duration:i,success:a,fail:o},c.isUndefined);r===void 0?uni.showToast(s):setTimeout(()=>{uni.showToast(s)},typeof r==`boolean`?200:r)});var Xe={info(e,t){return $({message:e,icon:`none`,mask:!0,delay:t==null?void 0:t.delay,duration:t==null?void 0:t.duration})},error(e,t){return $({message:e,icon:`none`,mask:!0,delay:t==null?void 0:t.delay,duration:t==null?void 0:t.duration})},success(e,t){return $({message:e,icon:`none`,mask:!0,delay:t==null?void 0:t.delay,duration:t==null?void 0:t.duration})}};function Ze(){return((Math.random()*6|0)+10).toString(16)}function Qe(){return(Math.random()*16|0).toString(16)}function $e(e=16){if(e<=0)return``;let t=Ze();for(let n=1;n<e;n++)t+=Qe();return t}exports.A4_HEIGHT=297,exports.A4_WIDTH=210,exports.DeviceLevel=ee,exports.SIMPLE_MOBILE_REG=_,exports.addUnit=L,exports.centToYuan=ge,exports.checkIsPC=Ye,exports.clearImageCache=h,exports.currency=ye,exports.deserializePageRange=We,exports.formatDistance=Se,exports.getA4Size=Ue,exports.getDeviceLevel=Le,exports.getDevicePerfMetrics=X,exports.getDpiSize=he,exports.getFallbackValue=Ce,exports.getFileSize=se,exports.getFormatImage=S,exports.getLogisticsState=Q,exports.getOSSImageInfo=N,exports.getOSSProcessImage=j,exports.getOSSUrlMerged=A,exports.getPageCount=qe,exports.getReadablePageRange=Ke,exports.getResizeImage=w,exports.getRotateImage=E,exports.loadImage=m,exports.mmToPx=B,exports.navigateToListPage=xe,exports.normalizeModalContent=Je,exports.normalizeOrderExpress=ze,exports.normalizeRoute=W,exports.phoneMask=ce,exports.px2rpx=F,exports.requireAsync=P,exports.resize=R,exports.resolveTemplate=Re,exports.rpx2px=I,exports.safeHideLoading=Te,exports.saveBase64Image=ae,exports.saveCanvasToTempFile=g,exports.saveImageToAlbum=oe,exports.serializePageRange=Ge,exports.setClipboardData=we,exports.toPage=be,exports.toast=Xe,exports.transform=z,exports.uuid=$e,exports.validateSimpleMobile=le,exports.yuanToCent=_e;
package/dist/index.d.cts CHANGED
@@ -1,3 +1,4 @@
1
+ import { ComponentInternalInstance } from "vue";
1
2
  //#region src/types.d.ts
2
3
  export declare enum DeviceLevel {
3
4
  LOW = "low",
@@ -60,13 +61,176 @@ export interface OSSImageInfo {
60
61
  yResolution?: string;
61
62
  }
62
63
  //#endregion
63
- //#region src/helpers/a4.d.ts
64
- export declare const A4_WIDTH = 210;
65
- export declare const A4_HEIGHT = 297;
66
- export declare function getA4Size(to: number): {
67
- width: number;
68
- height: number;
69
- };
64
+ //#region src/helpers/canvas.d.ts
65
+ /**
66
+ * 加载图片
67
+ * @param canvas
68
+ * @param url
69
+ * @returns
70
+ */
71
+ export declare const loadImage: (canvas: any, url: string) => Promise<WechatMiniprogram.Image>;
72
+ /**
73
+ * 清除图片缓存
74
+ */
75
+ export declare const clearImageCache: () => void;
76
+ /**
77
+ * canvas保存图片
78
+ * @param canvas
79
+ * @returns
80
+ */
81
+ export declare const saveCanvasToTempFile: (canvas: any, ratio?: number, tempFileName?: string) => string;
82
+ //#endregion
83
+ //#region src/helpers/image.d.ts
84
+ export interface SaveBase64ImageOptions {
85
+ /** 组件实例,OffscreenCanvas 绘制时建议传入 */
86
+ compInst?: ComponentInternalInstance | null;
87
+ /** 图片质量,范围 0-100 */
88
+ quality?: number;
89
+ /** 背景颜色 */
90
+ backgroundColor?: string;
91
+ }
92
+ /**
93
+ * 将 base64 图片通过 OffscreenCanvas 直接绘制后保存为本地临时图片
94
+ * (Image.src 支持 data URI,基础库 >= 2.11.0)
95
+ * @param base64 后台返回的 base64(可带 data:image 前缀)
96
+ * @returns 临时图片路径
97
+ */
98
+ export declare const saveBase64Image: (base64: string, options?: SaveBase64ImageOptions) => Promise<string>;
99
+ //#endregion
100
+ //#region src/helpers/file.d.ts
101
+ /**
102
+ * 保存远程图片到相册
103
+ * @param url
104
+ * @returns
105
+ */
106
+ export declare const saveImageToAlbum: (url: string) => Promise<void>;
107
+ /**
108
+ * 获取文件大小
109
+ * @param path
110
+ * @returns
111
+ */
112
+ export declare const getFileSize: (path: string) => Promise<number>;
113
+ //#endregion
114
+ //#region src/helpers/mobile.d.ts
115
+ /**
116
+ * 手机号脱敏
117
+ * @param mobile
118
+ * @returns
119
+ */
120
+ export declare function phoneMask(mobile: string | undefined): string;
121
+ /**
122
+ * 简单手机号正则
123
+ */
124
+ export declare const SIMPLE_MOBILE_REG: RegExp;
125
+ /**
126
+ * 验证手机号
127
+ * @param mobile
128
+ * @returns
129
+ */
130
+ export declare function validateSimpleMobile(mobile?: string): boolean;
131
+ //#endregion
132
+ //#region src/helpers/oss.d.ts
133
+ /**
134
+ * 格式化图片
135
+ * @param url 图片地址
136
+ * @param format 格式
137
+ * @returns 格式化后的图片地址
138
+ */
139
+ export declare const getFormatImage: (url: string, format: string) => string;
140
+ interface OSSResizeProp {
141
+ /**
142
+ * 按百分比缩放图片
143
+ * 小于100为缩小,大于100为放大。
144
+ */
145
+ p?: number;
146
+ /**
147
+ * 指定目标缩放图的宽度。
148
+ */
149
+ w?: number;
150
+ /**
151
+ * 指定目标缩放图的高度。
152
+ */
153
+ h?: number;
154
+ /**
155
+ * 指定缩放的模式
156
+ * lfit(默认值):等比缩放至指定宽高区域内最大图形。
157
+ * mfit:等比缩放至覆盖指定宽高区域。
158
+ * fill:等比缩放覆盖指定宽高区域,空白部分会填充背景色。
159
+ * pad:自适应填充,部分缩放图片内容可能超出指定宽高区域。
160
+ * fixed:固定长宽,缩放超出指定宽高的图片内容将被裁剪。
161
+ * @default lfit
162
+ */
163
+ m?: "lfit" | "mfit" | "fill" | "pad" | "fixed";
164
+ /**
165
+ * 指定目标缩放图的最长边。
166
+ */
167
+ l?: number;
168
+ /**
169
+ * 指定目标缩放图的最短边。
170
+ */
171
+ s?: number;
172
+ /**
173
+ * 当目标图片分辨率大于原图分辨率时,设置是否进行缩放。
174
+ * 1(默认值):返回按照原图分辨率转换的图片(可能和原图的体积不一样)
175
+ * 0:按指定参数进行缩放
176
+ * @default 1
177
+ */
178
+ limit?: 1 | 0;
179
+ /**
180
+ * 当缩放模式选择为pad(缩放填充)时,可以设置填充的颜色。
181
+ * RGB颜色值,例如:000000表示黑色,FFFFFF表示白色。
182
+ * @default FFFFFF
183
+ */
184
+ color?: string;
185
+ }
186
+ export declare const getResizeImage: (url: string, props: OSSResizeProp) => string;
187
+ interface OSSRotateProp {
188
+ /**
189
+ * 旋转角度
190
+ * @default 0
191
+ */
192
+ angle?: number;
193
+ }
194
+ export declare const getRotateImage: (url: string, props: OSSRotateProp) => string;
195
+ interface OSSProcessProps {
196
+ format?: string;
197
+ resize?: OSSResizeProp;
198
+ rotate?: OSSRotateProp;
199
+ }
200
+ interface OSSProcessPropsV2 {
201
+ format?: string;
202
+ resize?: OSSResizeProp;
203
+ rotate?: number;
204
+ quality?: number;
205
+ }
206
+ /**
207
+ * 获取OSS URL 合并后的地址
208
+ * @param url 原始URL
209
+ * @param props 处理参数
210
+ * @returns URL 合并后的地址
211
+ */
212
+ export declare const getOSSUrlMerged: (url: string, props: OSSProcessPropsV2) => string;
213
+ /**
214
+ * 获取OSS图片处理后的地址
215
+ * @param url 图片地址
216
+ * @param props 图片处理参数
217
+ * @returns 图片处理后的地址
218
+ */
219
+ export declare const getOSSProcessImage: (url: string, props: OSSProcessProps) => string;
220
+ /**
221
+ * 获取OSS图片信息
222
+ * @param url 图片地址
223
+ * @returns 图片信息
224
+ */
225
+ export declare const getOSSImageInfo: (url: string) => Promise<OSSImageInfo>;
226
+ //#endregion
227
+ //#region src/helpers/sub-pkg.d.ts
228
+ /**
229
+ * 异步加载分包模块
230
+ * @param module
231
+ * @returns
232
+ */
233
+ export declare function requireAsync<T>(module: string): Promise<T>;
70
234
  //#endregion
71
235
  //#region src/helpers/unit.d.ts
72
236
  /**
@@ -148,4 +312,155 @@ export declare function getDpiSize(width: number, height: number, dpi: number):
148
312
  width: number;
149
313
  height: number;
150
314
  };
151
- //#endregion
315
+ //#endregion
316
+ //#region src/helpers/currency.d.ts
317
+ export declare const centToYuan: (amount: string | number | undefined) => number;
318
+ export declare const yuanToCent: (amount: string | number | undefined) => number;
319
+ export type CurrencyOperation = number | string;
320
+ declare const _default: {
321
+ add: (a: CurrencyOperation, ...rest: CurrencyOperation[]) => number;
322
+ sub: (a: CurrencyOperation, ...rest: CurrencyOperation[]) => number;
323
+ multiply: (a: CurrencyOperation | undefined, b: CurrencyOperation | undefined) => number;
324
+ div: (a: CurrencyOperation | undefined, b: CurrencyOperation | undefined) => number;
325
+ avg: (a: CurrencyOperation, ...rest: CurrencyOperation[]) => number;
326
+ };
327
+ //#endregion
328
+ //#region src/helpers/route.d.ts
329
+ export type ToPageOptions = Parameters<typeof uni.navigateTo>[0];
330
+ /**
331
+ * 跳转页面
332
+ * @param option 跳转选项
333
+ */
334
+ export declare function toPage(option: ToPageOptions): void;
335
+ /**
336
+ * 跳转页面
337
+ * @param path 页面路径
338
+ * @param params 跳转参数
339
+ */
340
+ export declare function toPage(path: string, params?: any): void;
341
+ /**
342
+ * 规范化路由
343
+ * @param route 路由
344
+ * @returns 规范化后的路由
345
+ */
346
+ export declare function normalizeRoute(route: string): string;
347
+ interface NavigateToListPageOptions {
348
+ /**
349
+ * 列表页
350
+ */
351
+ listPage: string;
352
+ /**
353
+ * 起始页
354
+ */
355
+ firstPage: string;
356
+ }
357
+ /**
358
+ * 导航到列表页
359
+ * @param option 导航选项
360
+ */
361
+ export declare function navigateToListPage(option: NavigateToListPageOptions): void;
362
+ //#endregion
363
+ //#region src/helpers/distance.d.ts
364
+ export declare function formatDistance(distance: number, chinese?: boolean): string;
365
+ //#endregion
366
+ //#region src/helpers/value.d.ts
367
+ /**
368
+ * 根据setting值,从fallbackValues中找到第一个匹配的值,如果没有匹配到,则返回fallbackValues的最后一个值
369
+ * @param setting 设置值
370
+ * @param fallbackValues 值列表
371
+ * @param fallback 如果未找到匹配值,则返回该值,默认为fallbackValues的最后一个值
372
+ * @returns 值
373
+ */
374
+ export declare function getFallbackValue<T>(setting: T[], fallbackValues: T[], fallback?: T): T;
375
+ //#endregion
376
+ //#region src/helpers/clipboard.d.ts
377
+ export declare function setClipboardData(data: string): Promise<void>;
378
+ //#endregion
379
+ //#region src/helpers/loading.d.ts
380
+ export declare const safeHideLoading: () => void;
381
+ //#endregion
382
+ //#region src/helpers/perf.d.ts
383
+ /**
384
+ * 采集设备性能评测快照(多维度加权,不单依赖 benchmarkLevel)
385
+ */
386
+ export declare function getDevicePerfMetrics(): DevicePerfMetrics;
387
+ /**
388
+ * 评测当前设备性能档位(微信小程序)
389
+ *
390
+ * 综合 benchmarkLevel、物理内存、系统版本加权评分;
391
+ * 出图画布由打印 DPI 决定,与屏幕 DPR 无关,故不纳入设备评测。
392
+ */
393
+ export declare function getDeviceLevel(): DeviceLevel;
394
+ //#endregion
395
+ //#region src/helpers/template.d.ts
396
+ /**
397
+ * 解析模板
398
+ * @param template 模板
399
+ * @param data 数据
400
+ * @returns 解析后的模板
401
+ */
402
+ export declare function resolveTemplate(template: string, data: Record<string, any>): string;
403
+ //#endregion
404
+ //#region src/helpers/express.d.ts
405
+ export declare function normalizeOrderExpress<T extends Record<string, any>>(order?: T): T | undefined;
406
+ export declare function getLogisticsState(state: string): string;
407
+ //#endregion
408
+ //#region src/helpers/a4.d.ts
409
+ export declare const A4_WIDTH = 210;
410
+ export declare const A4_HEIGHT = 297;
411
+ export declare function getA4Size(to: number): {
412
+ width: number;
413
+ height: number;
414
+ };
415
+ //#endregion
416
+ //#region src/helpers/range.d.ts
417
+ /**
418
+ * 反序列化页码范围
419
+ * @param pageRange
420
+ * @returns
421
+ */
422
+ export declare function deserializePageRange(pageRange: string): number[];
423
+ /**
424
+ * 序列化页码范围为逗号分隔的区间字符串(连续页合并为 a-b)
425
+ * @example serializePageRange([1, 2, 3, 5, 7, 8]) => "1-3,5,7-8"
426
+ */
427
+ export declare function serializePageRange(pages: number[]): string;
428
+ /**
429
+ * 获取可读的页码范围
430
+ * @param pageRange
431
+ * @returns
432
+ */
433
+ export declare function getReadablePageRange(pageRange: string): string;
434
+ /**
435
+ * 获取页码范围的页数
436
+ * @param pageRange
437
+ * @returns
438
+ */
439
+ export declare function getPageCount(pageRange: string): number;
440
+ //#endregion
441
+ //#region src/helpers/modal.d.ts
442
+ export declare const normalizeModalContent: (content: string[]) => string;
443
+ //#endregion
444
+ //#region src/helpers/device.d.ts
445
+ export declare function checkIsPC(): boolean;
446
+ //#endregion
447
+ //#region src/helpers/toast.d.ts
448
+ type ToastOption = {
449
+ delay?: boolean | number;
450
+ duration?: number;
451
+ };
452
+ declare const _default$1: {
453
+ info(message: string, option?: ToastOption): Promise<unknown>;
454
+ error(message: string, option?: ToastOption): Promise<unknown>;
455
+ success(message: string, option?: ToastOption): Promise<unknown>;
456
+ };
457
+ //#endregion
458
+ //#region src/helpers/uuid.d.ts
459
+ /**
460
+ * 生成指定长度的简易随机 ID(十六进制字符)
461
+ * 首字符固定为字母(a-f),避免作为 DOM id 时以数字开头导致选择器无效
462
+ * @param length 生成长度,默认 16
463
+ */
464
+ declare function uuid(length?: number): string;
465
+ //#endregion
466
+ export { _default as currency, _default$1 as toast, uuid };
package/dist/index.d.mts CHANGED
@@ -1,3 +1,4 @@
1
+ import { ComponentInternalInstance } from "vue";
1
2
  //#region src/types.d.ts
2
3
  export declare enum DeviceLevel {
3
4
  LOW = "low",
@@ -60,13 +61,176 @@ export interface OSSImageInfo {
60
61
  yResolution?: string;
61
62
  }
62
63
  //#endregion
63
- //#region src/helpers/a4.d.ts
64
- export declare const A4_WIDTH = 210;
65
- export declare const A4_HEIGHT = 297;
66
- export declare function getA4Size(to: number): {
67
- width: number;
68
- height: number;
69
- };
64
+ //#region src/helpers/canvas.d.ts
65
+ /**
66
+ * 加载图片
67
+ * @param canvas
68
+ * @param url
69
+ * @returns
70
+ */
71
+ export declare const loadImage: (canvas: any, url: string) => Promise<WechatMiniprogram.Image>;
72
+ /**
73
+ * 清除图片缓存
74
+ */
75
+ export declare const clearImageCache: () => void;
76
+ /**
77
+ * canvas保存图片
78
+ * @param canvas
79
+ * @returns
80
+ */
81
+ export declare const saveCanvasToTempFile: (canvas: any, ratio?: number, tempFileName?: string) => string;
82
+ //#endregion
83
+ //#region src/helpers/image.d.ts
84
+ export interface SaveBase64ImageOptions {
85
+ /** 组件实例,OffscreenCanvas 绘制时建议传入 */
86
+ compInst?: ComponentInternalInstance | null;
87
+ /** 图片质量,范围 0-100 */
88
+ quality?: number;
89
+ /** 背景颜色 */
90
+ backgroundColor?: string;
91
+ }
92
+ /**
93
+ * 将 base64 图片通过 OffscreenCanvas 直接绘制后保存为本地临时图片
94
+ * (Image.src 支持 data URI,基础库 >= 2.11.0)
95
+ * @param base64 后台返回的 base64(可带 data:image 前缀)
96
+ * @returns 临时图片路径
97
+ */
98
+ export declare const saveBase64Image: (base64: string, options?: SaveBase64ImageOptions) => Promise<string>;
99
+ //#endregion
100
+ //#region src/helpers/file.d.ts
101
+ /**
102
+ * 保存远程图片到相册
103
+ * @param url
104
+ * @returns
105
+ */
106
+ export declare const saveImageToAlbum: (url: string) => Promise<void>;
107
+ /**
108
+ * 获取文件大小
109
+ * @param path
110
+ * @returns
111
+ */
112
+ export declare const getFileSize: (path: string) => Promise<number>;
113
+ //#endregion
114
+ //#region src/helpers/mobile.d.ts
115
+ /**
116
+ * 手机号脱敏
117
+ * @param mobile
118
+ * @returns
119
+ */
120
+ export declare function phoneMask(mobile: string | undefined): string;
121
+ /**
122
+ * 简单手机号正则
123
+ */
124
+ export declare const SIMPLE_MOBILE_REG: RegExp;
125
+ /**
126
+ * 验证手机号
127
+ * @param mobile
128
+ * @returns
129
+ */
130
+ export declare function validateSimpleMobile(mobile?: string): boolean;
131
+ //#endregion
132
+ //#region src/helpers/oss.d.ts
133
+ /**
134
+ * 格式化图片
135
+ * @param url 图片地址
136
+ * @param format 格式
137
+ * @returns 格式化后的图片地址
138
+ */
139
+ export declare const getFormatImage: (url: string, format: string) => string;
140
+ interface OSSResizeProp {
141
+ /**
142
+ * 按百分比缩放图片
143
+ * 小于100为缩小,大于100为放大。
144
+ */
145
+ p?: number;
146
+ /**
147
+ * 指定目标缩放图的宽度。
148
+ */
149
+ w?: number;
150
+ /**
151
+ * 指定目标缩放图的高度。
152
+ */
153
+ h?: number;
154
+ /**
155
+ * 指定缩放的模式
156
+ * lfit(默认值):等比缩放至指定宽高区域内最大图形。
157
+ * mfit:等比缩放至覆盖指定宽高区域。
158
+ * fill:等比缩放覆盖指定宽高区域,空白部分会填充背景色。
159
+ * pad:自适应填充,部分缩放图片内容可能超出指定宽高区域。
160
+ * fixed:固定长宽,缩放超出指定宽高的图片内容将被裁剪。
161
+ * @default lfit
162
+ */
163
+ m?: "lfit" | "mfit" | "fill" | "pad" | "fixed";
164
+ /**
165
+ * 指定目标缩放图的最长边。
166
+ */
167
+ l?: number;
168
+ /**
169
+ * 指定目标缩放图的最短边。
170
+ */
171
+ s?: number;
172
+ /**
173
+ * 当目标图片分辨率大于原图分辨率时,设置是否进行缩放。
174
+ * 1(默认值):返回按照原图分辨率转换的图片(可能和原图的体积不一样)
175
+ * 0:按指定参数进行缩放
176
+ * @default 1
177
+ */
178
+ limit?: 1 | 0;
179
+ /**
180
+ * 当缩放模式选择为pad(缩放填充)时,可以设置填充的颜色。
181
+ * RGB颜色值,例如:000000表示黑色,FFFFFF表示白色。
182
+ * @default FFFFFF
183
+ */
184
+ color?: string;
185
+ }
186
+ export declare const getResizeImage: (url: string, props: OSSResizeProp) => string;
187
+ interface OSSRotateProp {
188
+ /**
189
+ * 旋转角度
190
+ * @default 0
191
+ */
192
+ angle?: number;
193
+ }
194
+ export declare const getRotateImage: (url: string, props: OSSRotateProp) => string;
195
+ interface OSSProcessProps {
196
+ format?: string;
197
+ resize?: OSSResizeProp;
198
+ rotate?: OSSRotateProp;
199
+ }
200
+ interface OSSProcessPropsV2 {
201
+ format?: string;
202
+ resize?: OSSResizeProp;
203
+ rotate?: number;
204
+ quality?: number;
205
+ }
206
+ /**
207
+ * 获取OSS URL 合并后的地址
208
+ * @param url 原始URL
209
+ * @param props 处理参数
210
+ * @returns URL 合并后的地址
211
+ */
212
+ export declare const getOSSUrlMerged: (url: string, props: OSSProcessPropsV2) => string;
213
+ /**
214
+ * 获取OSS图片处理后的地址
215
+ * @param url 图片地址
216
+ * @param props 图片处理参数
217
+ * @returns 图片处理后的地址
218
+ */
219
+ export declare const getOSSProcessImage: (url: string, props: OSSProcessProps) => string;
220
+ /**
221
+ * 获取OSS图片信息
222
+ * @param url 图片地址
223
+ * @returns 图片信息
224
+ */
225
+ export declare const getOSSImageInfo: (url: string) => Promise<OSSImageInfo>;
226
+ //#endregion
227
+ //#region src/helpers/sub-pkg.d.ts
228
+ /**
229
+ * 异步加载分包模块
230
+ * @param module
231
+ * @returns
232
+ */
233
+ export declare function requireAsync<T>(module: string): Promise<T>;
70
234
  //#endregion
71
235
  //#region src/helpers/unit.d.ts
72
236
  /**
@@ -148,4 +312,155 @@ export declare function getDpiSize(width: number, height: number, dpi: number):
148
312
  width: number;
149
313
  height: number;
150
314
  };
151
- //#endregion
315
+ //#endregion
316
+ //#region src/helpers/currency.d.ts
317
+ export declare const centToYuan: (amount: string | number | undefined) => number;
318
+ export declare const yuanToCent: (amount: string | number | undefined) => number;
319
+ export type CurrencyOperation = number | string;
320
+ declare const _default: {
321
+ add: (a: CurrencyOperation, ...rest: CurrencyOperation[]) => number;
322
+ sub: (a: CurrencyOperation, ...rest: CurrencyOperation[]) => number;
323
+ multiply: (a: CurrencyOperation | undefined, b: CurrencyOperation | undefined) => number;
324
+ div: (a: CurrencyOperation | undefined, b: CurrencyOperation | undefined) => number;
325
+ avg: (a: CurrencyOperation, ...rest: CurrencyOperation[]) => number;
326
+ };
327
+ //#endregion
328
+ //#region src/helpers/route.d.ts
329
+ export type ToPageOptions = Parameters<typeof uni.navigateTo>[0];
330
+ /**
331
+ * 跳转页面
332
+ * @param option 跳转选项
333
+ */
334
+ export declare function toPage(option: ToPageOptions): void;
335
+ /**
336
+ * 跳转页面
337
+ * @param path 页面路径
338
+ * @param params 跳转参数
339
+ */
340
+ export declare function toPage(path: string, params?: any): void;
341
+ /**
342
+ * 规范化路由
343
+ * @param route 路由
344
+ * @returns 规范化后的路由
345
+ */
346
+ export declare function normalizeRoute(route: string): string;
347
+ interface NavigateToListPageOptions {
348
+ /**
349
+ * 列表页
350
+ */
351
+ listPage: string;
352
+ /**
353
+ * 起始页
354
+ */
355
+ firstPage: string;
356
+ }
357
+ /**
358
+ * 导航到列表页
359
+ * @param option 导航选项
360
+ */
361
+ export declare function navigateToListPage(option: NavigateToListPageOptions): void;
362
+ //#endregion
363
+ //#region src/helpers/distance.d.ts
364
+ export declare function formatDistance(distance: number, chinese?: boolean): string;
365
+ //#endregion
366
+ //#region src/helpers/value.d.ts
367
+ /**
368
+ * 根据setting值,从fallbackValues中找到第一个匹配的值,如果没有匹配到,则返回fallbackValues的最后一个值
369
+ * @param setting 设置值
370
+ * @param fallbackValues 值列表
371
+ * @param fallback 如果未找到匹配值,则返回该值,默认为fallbackValues的最后一个值
372
+ * @returns 值
373
+ */
374
+ export declare function getFallbackValue<T>(setting: T[], fallbackValues: T[], fallback?: T): T;
375
+ //#endregion
376
+ //#region src/helpers/clipboard.d.ts
377
+ export declare function setClipboardData(data: string): Promise<void>;
378
+ //#endregion
379
+ //#region src/helpers/loading.d.ts
380
+ export declare const safeHideLoading: () => void;
381
+ //#endregion
382
+ //#region src/helpers/perf.d.ts
383
+ /**
384
+ * 采集设备性能评测快照(多维度加权,不单依赖 benchmarkLevel)
385
+ */
386
+ export declare function getDevicePerfMetrics(): DevicePerfMetrics;
387
+ /**
388
+ * 评测当前设备性能档位(微信小程序)
389
+ *
390
+ * 综合 benchmarkLevel、物理内存、系统版本加权评分;
391
+ * 出图画布由打印 DPI 决定,与屏幕 DPR 无关,故不纳入设备评测。
392
+ */
393
+ export declare function getDeviceLevel(): DeviceLevel;
394
+ //#endregion
395
+ //#region src/helpers/template.d.ts
396
+ /**
397
+ * 解析模板
398
+ * @param template 模板
399
+ * @param data 数据
400
+ * @returns 解析后的模板
401
+ */
402
+ export declare function resolveTemplate(template: string, data: Record<string, any>): string;
403
+ //#endregion
404
+ //#region src/helpers/express.d.ts
405
+ export declare function normalizeOrderExpress<T extends Record<string, any>>(order?: T): T | undefined;
406
+ export declare function getLogisticsState(state: string): string;
407
+ //#endregion
408
+ //#region src/helpers/a4.d.ts
409
+ export declare const A4_WIDTH = 210;
410
+ export declare const A4_HEIGHT = 297;
411
+ export declare function getA4Size(to: number): {
412
+ width: number;
413
+ height: number;
414
+ };
415
+ //#endregion
416
+ //#region src/helpers/range.d.ts
417
+ /**
418
+ * 反序列化页码范围
419
+ * @param pageRange
420
+ * @returns
421
+ */
422
+ export declare function deserializePageRange(pageRange: string): number[];
423
+ /**
424
+ * 序列化页码范围为逗号分隔的区间字符串(连续页合并为 a-b)
425
+ * @example serializePageRange([1, 2, 3, 5, 7, 8]) => "1-3,5,7-8"
426
+ */
427
+ export declare function serializePageRange(pages: number[]): string;
428
+ /**
429
+ * 获取可读的页码范围
430
+ * @param pageRange
431
+ * @returns
432
+ */
433
+ export declare function getReadablePageRange(pageRange: string): string;
434
+ /**
435
+ * 获取页码范围的页数
436
+ * @param pageRange
437
+ * @returns
438
+ */
439
+ export declare function getPageCount(pageRange: string): number;
440
+ //#endregion
441
+ //#region src/helpers/modal.d.ts
442
+ export declare const normalizeModalContent: (content: string[]) => string;
443
+ //#endregion
444
+ //#region src/helpers/device.d.ts
445
+ export declare function checkIsPC(): boolean;
446
+ //#endregion
447
+ //#region src/helpers/toast.d.ts
448
+ type ToastOption = {
449
+ delay?: boolean | number;
450
+ duration?: number;
451
+ };
452
+ declare const _default$1: {
453
+ info(message: string, option?: ToastOption): Promise<unknown>;
454
+ error(message: string, option?: ToastOption): Promise<unknown>;
455
+ success(message: string, option?: ToastOption): Promise<unknown>;
456
+ };
457
+ //#endregion
458
+ //#region src/helpers/uuid.d.ts
459
+ /**
460
+ * 生成指定长度的简易随机 ID(十六进制字符)
461
+ * 首字符固定为字母(a-f),避免作为 DOM id 时以数字开头导致选择器无效
462
+ * @param length 生成长度,默认 16
463
+ */
464
+ declare function uuid(length?: number): string;
465
+ //#endregion
466
+ export { _default as currency, _default$1 as toast, uuid };
package/dist/index.mjs CHANGED
@@ -1 +1,2 @@
1
- let e=function(e){return e.LOW=`low`,e.MEDIUM=`medium`,e.HIGH=`high`,e}({});function t(e){let{windowWidth:t}=uni.getWindowInfo();return 750/t*e}function n(e){let{windowWidth:t}=uni.getWindowInfo();return t/750*e}function r(e,t=`rpx`){return`${e}${t}`}function i({to:e,from:t,sources:n}){let r=e/t;return n.map(e=>e*r)}function a({targetRpx:e,base:t=`width`,widthPx:n,heightPx:r}){let i=t===`width`?e/n:e/r,a=e=>e*i;return{width:a(n),height:a(r),px:a,ratio:i}}function o(e,t){return Math.round(e/25.4*t)}function s(e,t,n){return{width:o(e,n),height:o(t,n)}}const c=210,l=297;function u(e){let[t,n]=i({from:210,to:e,sources:[210,297]});return{width:t,height:n}}export{l as A4_HEIGHT,c as A4_WIDTH,e as DeviceLevel,r as addUnit,u as getA4Size,s as getDpiSize,o as mmToPx,t as px2rpx,i as resize,n as rpx2px,a as transform};
1
+ import{createRequire as e}from"node:module";import{get as t,isUndefined as n,omitBy as r,range as i,uniqueId as a}from"lodash-es";import o from"qs";import s from"decimal.js";import c from"dayjs";var l=e(import.meta.url);let u=function(e){return e.LOW=`low`,e.MEDIUM=`medium`,e.HIGH=`high`,e}({});const d=new Map,{platform:ee}=uni.getDeviceInfo(),te=e=>{let t=e.split(`.`).pop();return`${wx.env.USER_DATA_PATH}/${a(`image-cache-file`)}.${t}`},ne=e=>e.includes(`?`)?e+`&t=`+Date.now():e+`?t=`+Date.now(),re=(e,t)=>new Promise((n,r)=>{let i=t;if(ee===`android`){if(t.startsWith(`https`)||t.startsWith(`http`))i=ne(t);else{var a;let e=uni.getFileSystemManager();i=te(t),d.has(t)||d.set(t,[]),(a=d.get(t))==null||a.push(i),e.copyFileSync(t,i)}}let o=e.createImage();o.onload=()=>n(o),o.onerror=e=>r(e),o.src=i}),f=()=>{let e=uni.getFileSystemManager();d.values().forEach(t=>{t.forEach(t=>{e.unlink({filePath:t,fail:e=>{console.error(`unlink fail`,t,e)}})})}),d.clear()},p=(e,t=1,n=`tmp.png`)=>{let r=e.toDataURL(`image/png`,t).replace(/^data:image\/\w+;base64,/,``),i=uni.base64ToArrayBuffer(r),a=`${wx.env.USER_DATA_PATH}/${n}`;return uni.getFileSystemManager().writeFileSync(a,i,`binary`),a},m=e=>`data:image/png;base64,${e.replace(/^data:image\/\w+;base64,/,``).replace(/[\r\n]/g,``)}`,h=(e,t)=>new Promise((n,r)=>{let i=e.createImage();i.onload=()=>n(i),i.onerror=e=>r(e),i.src=t}),ie=async(e,t={})=>{let{compInst:n,quality:r=100,backgroundColor:i}=t,a=m(e),o=uni.createOffscreenCanvas({type:`2d`,width:1,height:1,compInst:n}),s=await h(o,a),{width:c,height:l}=s;o.width=c,o.height=l;let u=o.getContext(`2d`);i&&(u.fillStyle=i,u.fillRect(0,0,c,l)),u.fillRect(0,0,c,l),u.drawImage(s,0,0,c,l);let{tempFilePath:d}=await uni.canvasToTempFilePath({canvas:o,quality:r});return d},ae=async e=>{let{tempFilePath:t}=await uni.downloadFile({url:e});await uni.saveImageToPhotosAlbum({filePath:t})},oe=e=>{let t=uni.getFileSystemManager();return new Promise((n,r)=>{t.getFileInfo({filePath:e,success:e=>{n(e.size)},fail:e=>{r(e)}})})};function se(e){return e?e.length===11?e.slice(0,3)+`****`+e.slice(7):e:``}const g=/^\d{11}$/;function ce(e){return e?g.test(e):!1}function le(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.includes(r))continue;n[r]=e[r]}return n}function ue(e,t){if(e==null)return{};var n,r,i=le(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.includes(n)||{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function _(e){"@babel/helpers - typeof";return _=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},_(e)}function de(e,t){if(_(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(_(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function fe(e){var t=de(e,`string`);return _(t)==`symbol`?t:t+``}function pe(e,t,n){return(t=fe(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function y(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?v(Object(n),!0).forEach(function(t){pe(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}const b=[`x-oss-process`],x=(e,t)=>e+`?x-oss-process=image/format,`+t,S=e=>{let t=[];return e.p&&t.push(`p_${e.p}`),e.w&&t.push(`w_${e.w}`),e.h&&t.push(`h_${e.h}`),e.m&&t.push(`m_${e.m}`),e.l&&t.push(`l_${e.l}`),e.s&&t.push(`s_${e.s}`),e.limit&&t.push(`limit_${e.limit}`),e.color&&t.push(`color_${e.color}`),t.join(`,`)},C=(e,t)=>`${e}?x-oss-process=image/resize,${S(t)}`,w=e=>e.angle,T=(e,t)=>`${e}?x-oss-process=image/rotate,${w(t)}`;function E(e){let t=e.slice(e.indexOf(`/`)+1);return t?t.split(`/`).reduce((e,t)=>{let[n,...r]=t.split(`,`);if([`resize`].includes(n)){let t={};r.forEach(e=>{let[n,r]=e.split(`_`);t[n]=Number(r)}),e.resize=t}else e[n]=/^\d+$/.test(r[0])?Number(r[0]):r[0];return e},{}):{}}function D(e){let[t,n]=e.split(`?`),r=o.parse(n),{"x-oss-process":i}=r,a=ue(r,b);return{url:t,ossProcessProps:i?E(i):{},restProps:a}}function O(e){let t=[`image`];return e.format&&t.push(`/format,${e.format.toLowerCase()}`),e.resize&&t.push(`/resize,${S(e.resize)}`),e.rotate&&t.push(`/rotate,${w({angle:e.rotate})}`),e.quality&&t.push(`/quality,q_${e.quality}`),t.join(``)}const k=(e,t)=>{let{url:n,ossProcessProps:r,restProps:i}=D(e),a=y({"x-oss-process":O(y(y({},r),t))},i);return`${n}?${o.stringify(a)}`},A=(e,t)=>{let n=[];return t.format&&n.push(`/format,${t.format.toLowerCase()}`),t.resize&&n.push(`/resize,${S(t.resize)}`),t.rotate&&n.push(`/rotate,${w(t.rotate)}`),`${e}?x-oss-process=image${n.join(``)}`},j=e=>{var t,i,a,o,s,c,l,u;return r({fileSize:Number((t=e.FileSize)==null?void 0:t.value),format:(i=e.Format)==null?void 0:i.value,frameCount:Number((a=e.FrameCount)==null?void 0:a.value),imageWidth:Number((o=e.ImageWidth)==null?void 0:o.value),imageHeight:Number((s=e.ImageHeight)==null?void 0:s.value),resolutionUnit:(c=e.ResolutionUnit)==null?void 0:c.value,xResolution:(l=e.XResolution)==null?void 0:l.value,yResolution:(u=e.YResolution)==null?void 0:u.value},n)},M=async e=>new Promise((t,n)=>{uni.request({url:`${e}?x-oss-process=image/info`,method:`GET`,dataType:`json`,success:e=>{e.statusCode===200?t(j(e.data)):n(Error(`Failed to get image info: ${e.statusCode}`))},fail:e=>{n(e)}})});function N(e){return l.async(e)}function P(e){let{windowWidth:t}=uni.getWindowInfo();return 750/t*e}function F(e){let{windowWidth:t}=uni.getWindowInfo();return t/750*e}function I(e,t=`rpx`){return`${e}${t}`}function L({to:e,from:t,sources:n}){let r=e/t;return n.map(e=>e*r)}function R({targetRpx:e,base:t=`width`,widthPx:n,heightPx:r}){let i=t===`width`?e/n:e/r,a=e=>e*i;return{width:a(n),height:a(r),px:a,ratio:i}}function z(e,t){return Math.round(e/25.4*t)}function B(e,t,n){return{width:z(e,n),height:z(t,n)}}const me=e=>e===void 0?0:U(e,100),he=e=>n(e)?0:V(e,100),V=(e,t)=>n(e)||n(t)?0:new s(e).mul(t).toNumber(),ge=(e,...t)=>{let n=new s(e);return t.forEach(e=>{n=n.sub(e)}),n.toNumber()},H=(e,...t)=>{let n=new s(e);return t.forEach(e=>{n=n.add(e)}),n.toNumber()},U=(e,t)=>n(e)||n(t)||Number(t)===0?0:new s(e).div(t).toNumber();var _e={add:H,sub:ge,multiply:V,div:U,avg:(e,...t)=>{let n=H(e,...t);return U(n,t.length+1)}};function ve(e,t){typeof e==`string`?uni.navigateTo({url:e,params:t}):uni.navigateTo(e)}function W(e){return e.startsWith(`/`)?e:`/${e}`}function ye(e){let t=getCurrentPages(),n=W(e.listPage),r=W(e.firstPage),i=t.map(e=>W(e.route)),a=i.findIndex(e=>e===n);if(a!==-1)uni.navigateBack({delta:t.length-a-1});else{let e=i.findIndex(e=>e===r);e===-1?uni.navigateTo({url:r}):(uni.navigateBack({delta:t.length-e}),setTimeout(()=>{uni.navigateTo({url:n})},500))}}function be(e,t=!1){return e<1e3?t?`${Math.round(e)}米`:`${Math.round(e)}m`:t?`${(e/1e3).toFixed(1)}千米`:`${(e/1e3).toFixed(1)}km`}function xe(e,t,n){for(let n of t)if(e.includes(n))return n;return n==null?t[t.length-1]:n}async function Se(e){try{await uni.setClipboardData({data:e})}catch(e){throw uni.showModal({title:`复制失败`,content:JSON.stringify(e),showCancel:!1}),e}}const Ce=()=>{uni.hideLoading({fail:()=>{}})},G={high:.62,medium:.38},K={benchmark:.45,memory:.35,system:.2},q={memory:.6,system:.4};function J(){return uni.getDeviceInfo()}function we(){let{benchmarkLevel:e}=J();if(e!==void 0)return e;let{benchmarkLevel:t}=uni.getSystemInfoSync();return t}function Te(e){if(!e)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function Y(e,t){if(t===`ios`){let t=e.match(/iOS\s+(\d+)/i);return t?Number(t[1]):void 0}if(t===`android`||t===`ohos`){let t=e.match(/Android\s+(\d+)/i);return t?Number(t[1]):void 0}}function Ee(e){if(e<=0)return 0;if(!(e<0))return Math.min(1,(e-1)/49)}function De(e){return Math.min(1,Math.max(0,(e-2048)/10240))}function Oe(e){return e>=17?1:e>=15?.85:e>=13?.6:e>=11?.4:.2}function ke(e){return e>=13?1:e>=10?.7:e>=8?.45:.2}function Ae(e,t){return e===`ios`?Oe(t):e===`android`||e===`ohos`?ke(t):.5}function je(e){let t=[],n=e.benchmark!==void 0;if(e.benchmark!==void 0&&t.push({score:e.benchmark,weight:K.benchmark}),e.memory!==void 0&&t.push({score:e.memory,weight:n?K.memory:q.memory}),e.system!==void 0&&t.push({score:e.system,weight:n?K.system:q.system}),t.length===0)return .5;let r=t.reduce((e,t)=>e+t.weight,0);return t.reduce((e,t)=>e+t.score*t.weight,0)/r}function Me(e){return e>=G.high?`high`:e>=G.medium?`medium`:`low`}function Ne(e,t,n){return t!==void 0&&t<=0||n!==void 0&&n<2048?`low`:e===`high`&&n!==void 0&&n<4096&&(t===void 0||t<0)?`medium`:e}function Pe(e,t,n,r){let i={};if(n!==void 0){let e=Ee(n);e!==void 0&&(i.benchmark=e)}r!==void 0&&(i.memory=De(r));let a=Y(t,e);return a!==void 0&&(i.system=Ae(e,a)),i}function X(){let{platform:e,system:t,memorySize:n}=J();if(e===`devtools`)return{platform:e,scores:{benchmark:1,memory:1,system:1},compositeScore:1,level:`high`};let r=we(),i=Te(n),a=Pe(e,t,r,i),o=je(a),s=Me(o);s=Ne(s,r,i);let c={platform:e,benchmarkLevel:r,memoryMb:i,systemMajor:Y(t,e),scores:a,compositeScore:o,level:s};return uni.getAccountInfoSync().miniProgram.envVersion!==`release`&&(console.log(`------------- device perf metrics -------------`),Object.entries(c).forEach(([e,t])=>{console.log(`${e}: ${JSON.stringify(t)}`)}),console.log(`------------- device perf metrics -------------`)),c}function Fe(){return X().level}function Ie(e,n){return e.replace(/\${(.+?)}/g,(e,r)=>t(n,r,e))}function Le(e){var t;if(e){if(`logisticsShipList`in e){var n;return y(y({},e),{},{logisticsShipList:Re([...e.logisticsShipList]),logisticsList:Z([...(n=e.logisticsList)==null?[]:n])})}return y(y({},e),{},{logisticsList:Z([...(t=e.logisticsList)==null?[]:t])})}}function Re(e){return e.sort((e,t)=>c(t.logisticsTime).diff(c(e.logisticsTime)))}function Z(e){return e.map(e=>y(y({},e),{},{dataList:ze(e.dataList)}))}function ze(e){return e.sort((e,t)=>c(t.time).diff(c(e.time)))}const Be={0:`在途`,1:`揽收`,2:`疑难`,3:`签收`,4:`退签`,5:`派件`,8:`清关`,14:`拒签`};function Ve(e){var t;return(t=Be[e])==null?`未知`:t}const He=210,Q=297;function Ue(e){let[t,n]=L({from:210,to:e,sources:[210,297]});return{width:t,height:n}}function We(e){return e.split(`,`).reduce((e,t)=>{let[n,r]=t.split(`-`);return r===void 0?e.concat(Number(n)):e.concat(i(Number(n),Number(r)+1))},[])}function Ge(e){return e.reduce((t,n,r)=>(t.length===0?t.push({start:n,end:n}):n===e[r-1]+1?t[t.length-1].end=n:t.push({start:n,end:n}),t),[]).map(e=>e.start===e.end?String(e.start):`${e.start}-${e.end}`).join(`,`)}function Ke(e){return e.length>8?`${e.substring(0,8)}...`:e}function qe(e){return e.split(`,`).reduce((e,t)=>{let[n,r]=t.split(`-`);return r===void 0?e+1:e+(Number(r)-Number(n)+1)},0)}const Je=e=>e.join(`\r
2
+ `);function Ye(){let{platform:e}=uni.getDeviceInfo();return[`windows`,`mac`].includes(e)}const $=({message:e,mask:t,icon:i,delay:a,duration:o})=>new Promise((s,c)=>{let l=r({title:e,icon:i,mask:t,duration:o,success:s,fail:c},n);a===void 0?uni.showToast(l):setTimeout(()=>{uni.showToast(l)},typeof a==`boolean`?200:a)});var Xe={info(e,t){return $({message:e,icon:`none`,mask:!0,delay:t==null?void 0:t.delay,duration:t==null?void 0:t.duration})},error(e,t){return $({message:e,icon:`none`,mask:!0,delay:t==null?void 0:t.delay,duration:t==null?void 0:t.duration})},success(e,t){return $({message:e,icon:`none`,mask:!0,delay:t==null?void 0:t.delay,duration:t==null?void 0:t.duration})}};function Ze(){return((Math.random()*6|0)+10).toString(16)}function Qe(){return(Math.random()*16|0).toString(16)}function $e(e=16){if(e<=0)return``;let t=Ze();for(let n=1;n<e;n++)t+=Qe();return t}export{Q as A4_HEIGHT,He as A4_WIDTH,u as DeviceLevel,g as SIMPLE_MOBILE_REG,I as addUnit,me as centToYuan,Ye as checkIsPC,f as clearImageCache,_e as currency,We as deserializePageRange,be as formatDistance,Ue as getA4Size,Fe as getDeviceLevel,X as getDevicePerfMetrics,B as getDpiSize,xe as getFallbackValue,oe as getFileSize,x as getFormatImage,Ve as getLogisticsState,M as getOSSImageInfo,A as getOSSProcessImage,k as getOSSUrlMerged,qe as getPageCount,Ke as getReadablePageRange,C as getResizeImage,T as getRotateImage,re as loadImage,z as mmToPx,ye as navigateToListPage,Je as normalizeModalContent,Le as normalizeOrderExpress,W as normalizeRoute,se as phoneMask,P as px2rpx,N as requireAsync,L as resize,Ie as resolveTemplate,F as rpx2px,Ce as safeHideLoading,ie as saveBase64Image,p as saveCanvasToTempFile,ae as saveImageToAlbum,Ge as serializePageRange,Se as setClipboardData,ve as toPage,Xe as toast,R as transform,$e as uuid,ce as validateSimpleMobile,he as yuanToCent};
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@cloud-print/uni-utils",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "uniapp 云打印项目工具库",
5
5
  "scripts": {
6
6
  "build": "tsdown",
7
+ "lint": "eslint . --ext .ts,.vue --fix",
7
8
  "release:patch": "npx release-it --increment patch",
8
9
  "release:minor": "npx release-it --increment minor",
9
10
  "release:major": "npx release-it --increment major"
@@ -33,17 +34,31 @@
33
34
  "dist"
34
35
  ],
35
36
  "devDependencies": {
36
- "@biomejs/biome": "^2.5.13",
37
37
  "@tsconfig/node26": "^26.0.1",
38
38
  "@types/node": "^26.5.0",
39
39
  "tsdown": "^0.23.0",
40
40
  "@release-it/conventional-changelog": "^10.0.1",
41
- "release-it": "^19.0.3"
41
+ "release-it": "^19.0.3",
42
+ "@types/lodash-es": "^4.17.12",
43
+ "@types/qs": "^6.9.15",
44
+ "@dcloudio/types": "^3.4.32",
45
+ "@typescript-eslint/eslint-plugin": "^8.34.1",
46
+ "eslint": "^8.45.0",
47
+ "eslint-plugin-prettier": "^5.0.0",
48
+ "eslint-plugin-vue": "^9.15.1",
49
+ "prettier": "^3.3.3",
50
+ "@vue/eslint-config-prettier": "^7.1.0",
51
+ "@vue/eslint-config-typescript": "^11.0.3",
52
+ "typescript": "^4.8.0 || ^5.0.0 || ^6.0.0"
42
53
  },
43
54
  "peerDependencies": {
44
- "@dcloudio/types": "^3.4.32",
45
- "typescript": "^4.8.0 || ^5.0.0 || ^6.0.0",
46
- "vue": "^3.2.0"
55
+ "vue": "^3.2.0",
56
+ "lodash-es": "^4.17.21",
57
+ "decimal.js": "^10.4.3",
58
+ "dayjs": "^1.11.12",
59
+ "qs": "^6.12.3",
60
+ "axios": "^1.7.2",
61
+ "@cloud-print/uni-http": "*"
47
62
  },
48
63
  "publishConfig": {
49
64
  "access": "public",
@@ -63,8 +78,11 @@
63
78
  "plugins": {
64
79
  "@release-it/conventional-changelog": {
65
80
  "preset": "angular",
66
- "infile": "changelog.md"
81
+ "infile": "CHANGELOG.md"
67
82
  }
83
+ },
84
+ "hooks": {
85
+ "before:release": "pnpm build"
68
86
  }
69
87
  }
70
88
  }