123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- // eslint-disable
- export const isObject = (obj) => {
- return obj
- ? Object.prototype.toString.call(obj) === "[object Object]"
- : false;
- };
- export const isArray = (arr) => {
- return arr ? Array.isArray(arr) : false;
- };
- /**
- * handle async await
- * @param {*} promise promise
- */
- export const awaitWrap = (promise) =>
- promise.then((res) => [null, res]).catch((err) => [err, {}]);
- /**
- * 深拷贝
- * @param {*} source
- */
- export const deepClone = (source) => {
- if (!isObject(source) && !isArray(source)) return source;
- const targetObj = isArray(source) ? [] : {}; // 判断复制的目标是数组还是对象
- for (let keys in source) {
- // 遍历目标
- if (source.hasOwnProperty(keys)) {
- if (source[keys] && typeof source[keys] === "object") {
- // 如果值是对象,就递归一下
- targetObj[keys] = isArray(source[keys]) ? [] : {};
- targetObj[keys] = deepClone(source[keys]);
- } else {
- // 如果不是,就直接赋值
- targetObj[keys] = source[keys];
- }
- }
- }
- return targetObj;
- };
- /**
- * @description JS对象深度合并
- * @param {object} target 需要拷贝的对象
- * @param {object} source 拷贝的来源对象
- * @returns {object|boolean} 深度合并后的对象或者false(入参有不是对象)
- */
- export const deepMerge = (target = {}, source = {}) => {
- target = deepClone(target);
- if (typeof target !== "object" || typeof source !== "object") return false;
- for (const prop in source) {
- if (!source.hasOwnProperty(prop)) continue;
- if (prop in target) {
- if (typeof target[prop] !== "object") {
- target[prop] = source[prop];
- } else if (typeof source[prop] !== "object") {
- target[prop] = source[prop];
- } else if (target[prop].concat && source[prop].concat) {
- target[prop] = target[prop].concat(source[prop]);
- } else {
- target[prop] = deepMerge(target[prop], source[prop]);
- }
- } else {
- target[prop] = source[prop];
- }
- }
- return target;
- };
- /**
- * 将File对象转为 Blob Url
- * @param {File} File对象
- * @returns Blob Url
- */
- export const fileToBlob = (file) => {
- if (!file) return;
- const fileType = file.type;
- const blob = new Blob([file], { type: fileType || 'application/*' });
- const blobUrl = window.URL.createObjectURL(blob);
- return blobUrl;
- };
- /**
- * 将File对象转为 base64
- * @param {File} File对象
- * @returns base64
- */
- export const fileToBase64 = (file) => {
- if (!file) return;
- return new Promise((r, j) => {
- const reader = new FileReader();
- reader.onloadend = () => {
- const base64String = reader.result;
- r(base64String);
- };
- reader.onerror = () => {
- j({ mode: 'fileToBase64', data: { errMsg: 'File to base64 fail.' } });
- };
- reader.readAsDataURL(file);
- });
- };
- /**
- * base64转临时路径(改自https://github.com/zhetengbiji/image-tools/blob/master/index.js)
- * @param base64
- * @returns
- */
- function dataUrlToBase64(str) {
- var array = str.split(',');
- return array[array.length - 1];
- };
- function biggerThan(v1, v2) {
- var v1Array = v1.split('.');
- var v2Array = v2.split('.');
- var update = false;
- for (var index = 0; index < v2Array.length; index++) {
- var diff = v1Array[index] - v2Array[index];
- if (diff !== 0) {
- update = diff > 0;
- break;
- }
- }
- return update;
- };
- var index = 0;
- function getNewFileId() {
- return Date.now() + String(index++);
- };
- export const base64ToPath = (base64, name = '') => {
- return new Promise((r, j) => {
- if (typeof plus !== 'object') {
- return j(new Error('not support'));
- }
- var fileName = '';
- if (name) {
- const names = name.split('.');
- const extName = names.splice(-1);
- fileName = `${names.join('.')}-${getNewFileId()}.${extName}`;
- } else {
- const names = base64.split(',')[0].match(/data\:\S+\/(\S+);/);
- if (!names) {
- j(new Error('base64 error'));
- }
- const extName = names[1];
- fileName = `${getNewFileId()}.${extName}`;
- }
- var basePath = '_doc';
- var dirPath = 'uniapp_temp';
- var filePath = `${basePath}/${dirPath}/${fileName}`;
- if (!biggerThan(plus.os.name === 'Android' ? '1.9.9.80627' : '1.9.9.80472', plus.runtime.innerVersion)) {
- plus.io.resolveLocalFileSystemURL(basePath, function (entry) {
- entry.getDirectory(dirPath, {
- create: true,
- exclusive: false,
- }, function (entry) {
- entry.getFile(fileName, {
- create: true,
- exclusive: false,
- }, function (entry) {
- entry.createWriter(function (writer) {
- writer.onwrite = function () {
- r(filePath);
- }
- writer.onerror = j;
- writer.seek(0);
- writer.writeAsBinary(dataUrlToBase64(base64));
- }, j)
- }, j)
- }, j)
- }, j)
- return;
- }
- var bitmap = new plus.nativeObj.Bitmap(fileName);
- bitmap.loadBase64Data(base64, function () {
- bitmap.save(filePath, {}, function () {
- bitmap.clear();
- r(filePath);
- }, function (error) {
- bitmap.clear();
- j(error);
- });
- }, function (error) {
- bitmap.clear();
- j(error);
- });
- });
- };
|