UNPKG

press-ui

Version:

简单、易用的跨端组件库,兼容 Vue2 和 Vue3,同时支持 uni-app和普通 Vue 项目

160 lines (152 loc) 4.1 kB
import { uniChooseFile, uniChooseImage, uniChooseVideo } from '../common/media/adapter'; // function pickExclude(obj, keys) { // // 某些情况下,type可能会为 // if (!['[object Object]', '[object File]'].includes(Object.prototype.toString.call(obj))) { // return {}; // } // return Object.keys(obj).reduce((prev, key) => { // if (!keys.includes(key)) { // prev[key] = obj[key]; // } // return prev; // }, {}); // } function formatImage(res) { return res.tempFiles; // return res.tempFiles.map(item => ({ // ...pickExclude(item, ['path']), // type: 'image', // url: item.path, // thumb: item.path, // size: item.size, // // #ifdef H5 // name: item.name, // // #endif // })); } function formatVideo(res) { return res; // return [ // { // ...pickExclude(res, ['tempFilePath', 'thumbTempFilePath', 'errMsg']), // type: 'video', // url: res.tempFilePath, // thumb: res.thumbTempFilePath, // size: res.size, // // #ifdef H5 // name: res.name, // // #endif // }, // ]; } function formatMedia(res) { return res.tempFiles; // return res.tempFiles.map(item => ({ // ...pickExclude(item, ['fileType', 'thumbTempFilePath', 'tempFilePath']), // type: res.type, // url: item.tempFilePath, // thumb: res.type === 'video' ? item.thumbTempFilePath : item.tempFilePath, // size: item.size, // })); } function formatFile(res) { return res.tempFiles; // return res.tempFiles.map(item => ({ // ...pickExclude(item, ['path']), // url: item.path, // size: item.size, // // #ifdef H5 // name: item.name, // type: item.type, // // #endif // })); } export function chooseFile({ accept, multiple, capture, compressed, maxDuration, sizeType, camera, maxCount, }) { return new Promise((resolve, reject) => { switch (accept) { case 'image': uniChooseImage({ count: multiple ? Math.min(maxCount, 9) : 1, sourceType: capture, sizeType, success: res => resolve(formatImage(res)), fail: reject, }); break; // #ifdef MP-WEIXIN // 只有微信小程序才支持chooseMedia接口 case 'media': wx.chooseMedia({ count: multiple ? Math.min(maxCount, 9) : 1, sourceType: capture, maxDuration, sizeType, camera, success: res => resolve(formatMedia(res)), fail: reject, }); break; // #endif case 'video': uniChooseVideo({ sourceType: capture, compressed, maxDuration, camera, success: res => resolve(formatVideo(res)), fail: reject, }); break; // #ifdef MP-WEIXIN || H5 // 只有微信小程序才支持chooseMessageFile接口 case 'file': // #ifdef MP-WEIXIN wx.chooseMessageFile({ count: multiple ? maxCount : 1, type: accept, success: res => resolve(formatFile(res)), fail: reject, }); // #endif // #ifdef H5 // 需要hx2.9.9以上才支持uni.chooseFile uniChooseFile({ count: multiple ? maxCount : 1, type: accept, success: res => resolve(formatFile(res)), fail: reject, }); // #endif break; // #endif default: // 此为保底选项,在accept不为上面任意一项的时候选取全部文件 // #ifdef MP-WEIXIN wx.chooseMessageFile({ count: multiple ? maxCount : 1, type: 'all', success: res => resolve(formatFile(res)), fail: reject, }); // #endif // #ifdef H5 // 需要hx2.9.9以上才支持uni.chooseFile uniChooseFile({ count: multiple ? maxCount : 1, type: 'all', success: res => resolve(formatFile(res)), fail: reject, }); // #endif } }); }