// #ifdef APP-PLUS import { chooseSystemMedia } from "@/uni_modules/uni-chooseSystemImage" // #endif import verConfig from "../ver.config" import { t } from "@/locale"; import { getStorage } from './storage' import { getCurrentInstance } from "vue"; import { useSystemStore } from "@/store"; let useSystem = null; export const useGlobal = () => { const { appContext } = getCurrentInstance(); return appContext.config.globalProperties; } export const getToken = (token = verConfig.tokenName) => { // const _token = JSON.parse(uni.getStorageSync(token) || '{}'); // return _token.token || '' return getStorage(token); } export const Toast = (title, duration = 2000, icon = 'none') => new Promise((resolve, reject) => { uni.showToast({ title, icon, duration, success: (res => resolve(res)), fail: (err => reject(err)) }) }) export const query = (className, _instance) => new Promise((resolve, reject) => { let query = uni.createSelectorQuery() query.select(className).boundingClientRect(res => { resolve(res) }).exec() }) export const Modal = ({ content, title = t('提示'), showCancel = true, cancelText = t('取消'), confirmText = t('确认') }) => new Promise((resolve, reject) => { uni.showModal({ title, content, showCancel, cancelText, confirmText, success: (res => { if (res.confirm) { resolve(res.confirm) } else if (res.cancel) { reject(res.cancel) } }), fail: (err => { reject(err) }) }) }) export const useImg = (url, options = {}) => { const { baseURL, api } = options; // if (url && url.charAt(0) === '/') { // url = url.substring(0, url.length); // } if (/^http/.test(url)) { return url; } return api ? ((baseURL || verConfig.newUrl) + api + url) : ((baseURL || verConfig.newUrl) + url); } export const systemInfo = () => { const res = uni.getSystemInfoSync(); return res } export const downFile = ({ file_name, file_url, file_path, cattype }) => { let url = file_url || file_path // #ifdef APP-PLUS let dtask = plus.downloader.createDownload(url, { filename: `file:///storage/emulated/0/lawyerApp/${file_name}${getFileSuffix(url)[1]}` }, (d, status) => { if (status == 200) { Toast('文件下载并保存成功'); } else { Toast('保存失败') } }) plus.io.resolveLocalFileSystemURL('file:///storage/emulated/0/lawyerApp/', entry => { }, function (error) { plus.io.requestFileSystem(plus.io.PRIVATE_DOC, fs => { fs.root.getDirectory('lawyerApp', { create: true }, dirEntry => { dtask.start(); }, function (err) { }); }); }); // #endif // #ifdef H5 fetch(url).then(response => { if (!response.ok) { throw new Error('网络响应不正常'); } return response.blob(); }).then(blob => { const objectUrl = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = objectUrl; link.download = file_name; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(objectUrl); }).catch(error => { Toast('下载失败') }); // #endif } export const uploadChooseImage = (sourceType = 'album', count = 1) => new Promise((resolve, reject) => { // #ifdef APP-PLUS // if (systemInfo().osName == 'android') { // uploadSystemMedia('image', count).then(result => { // resolve(result) // }) // .catch(err => { // reject(err) // }) // return // } // #endif uni.chooseImage({ count, sizeType: ['compressed'], sourceType: [sourceType], success: res => { console.log('----- uni.chooseImage res -----', JSON.stringify(res)) if (count == 1) { const tempFilePath = res.tempFilePaths[0]; const tempFile = res.tempFiles[0] return resolve({ tempFilePath, tempFile, errMsg: res.errMsg }) } return resolve(res) }, fail: err => { Toast(t('上传失败')); reject(err) } }) }) // #ifdef APP-PLUS export const uploadSystemMedia = (mediaType = 'image', count = 1) => new Promise((resolve, reject) => { chooseSystemMedia({ count, pageOrientation: 'auto', mediaType: [mediaType], success: res => { if (count == 1) { const tempFilePath = res.filePaths[0]; const tempFile = { path: res.filePaths[0], size: null } return resolve({ tempFilePath, tempFile, errMsg: 'chooseImage:ok' }) } return resolve(res) }, fail: err => { console.log('----- chooseSystemMedia err -----', JSON.stringify(err)) Toast(t('上传失败')); reject(err) } }) }) // #endif export const uploadChooseVideo = (sourceType = ['album'], camera = 'back', extension = ['mp4', 'avi', 'mov']) => new Promise((resolve, reject) => { uni.chooseVideo({ extension, sourceType, camera, compressed: true, success: res => { // #ifdef H5 const type = res.tempFile.type; if (!type.includes('video')) return Toast('请上传视频'); // #endif const screenWidth = systemInfo().screenWidth; const aspect = res.width / res.height; const videoWidth = screenWidth + 'rpx' const videoheight = (screenWidth / aspect) + 'rpx' resolve({ tempFilePath: res.tempFilePath, videoWidth, videoheight }) }, fail: err => { Toast('上传失败'); reject(err) } }) }) export const getFileSuffix = (str) => { const lastDotIndex = str.lastIndexOf('.'); if (lastDotIndex === -1) { return ''; } return [str.substring(0, lastDotIndex), str.substring(lastDotIndex)]; } export const stringToHex = () => { let str = (getStorage(verConfig.infoName) || {}).id + '/1' let hex = ''; for (let i = 0; i < str.length; i++) { hex += str.charCodeAt(i).toString(16).padStart(2, '0'); } return `cu${hex}`; } var keepDigits = function (number, digital) { if (digital === void 0) { digital = 2; } var res = number.toString(); var zeroNum = digital - res.length; for (var i = 0; i < zeroNum; i++) { res = "0" + res; } return res; }; export const format = function (time, format) { if (!time) return if (format === void 0) { format = "yyyy-MM-dd HH:mm:ss"; } if (typeof time === "number") { var len = time.toString().length; if (len === 10) { time *= 1000; } } var date = new Date(time); var formatTypes = { y: date.getFullYear(), M: date.getMonth() + 1, d: date.getDate(), H: date.getHours(), m: date.getMinutes(), s: date.getSeconds() }; var res = format; for (var key in formatTypes) { if (Object.prototype.hasOwnProperty.call(formatTypes, key)) { var value = formatTypes[key]; res = res.replace(new RegExp(key + "+"), keepDigits(value, 2)); } } return res; }; export const debounce = (func, delay) => { let timer; return function (...args) { clearTimeout(timer); timer = setTimeout(() => { func.apply(this, args); }, delay); }; } export const throttle = (func, limit) => { let lastFunc; let lastRan; return function (...args) { const context = this; if (!lastRan) { func.apply(context, args); lastRan = Date.now(); } else { clearTimeout(lastFunc); lastFunc = setTimeout(function () { if ((Date.now() - lastRan) >= limit) { func.apply(context, args); lastRan = Date.now(); } }, limit - (Date.now() - lastRan)); } }; } export const uniappStorage = { getItem: (key) => { try { return uni.getStorageSync(key) || null } catch (error) { return null } }, setItem: (key, value) => { try { uni.setStorageSync(key, value) } catch (error) { } } } export const openUrl = (url) => { // #ifdef H5 window.location.href = url; // #endif // #ifdef APP plus.runtime.openURL(url) // #endif } export const refresh = (url) => { // #ifdef H5 window.location.reload(); // #endif // #ifdef APP uni.navigateTo({ url }); // #endif } export const converMoney = (money, rate = 1) => { useSystem = useSystemStore(); const symbol = useSystem.getSymbol; if (!money) return '0.00'; money = typeof money === 'string' ? (money - 0) : money; rate = Number(symbol.rate) const newMoney = (money / rate).toFixed(2); return `${newMoney}` } export const Moneyhtml = (money, flag = false, isConver = true) => { useSystem = useSystemStore(); const symbol = useSystem.getSymbol; if (!money) return '0.00'; const price = Number(money).toFixed(2); let newMoney = price; if (isConver) newMoney = converMoney(price, symbol.rate) const arr = newMoney.split('.'); if (flag) return `${arr[0]}.${arr[1]}`; return newMoney } export const converAboutMoney = (money, symbol, CnyItem) => { if (!money) return '0.00'; money = typeof money === 'string' ? (money - 0) : money; let rate = Number(symbol.rate || 1) const newMoney = (money / rate).toFixed(2); return { CnyMoney: (money / (CnyItem?.rate || 1)).toFixed(2), newMoney } } export const MoneyAbouthtml = (money, flag = false) => { useSystem = useSystemStore(); const symbol = useSystem.getSymbol; const rateList = useSystem.getRateList; const CnyItem = rateList.find(item => item.code === 'CNY'); if (!money) return '0.00'; const price = typeof money === 'string' ? (money - 0) : money; const { CnyMoney, newMoney } = converAboutMoney(price, symbol, CnyItem); const cnyArr = CnyMoney.split('.'); const arr = newMoney.split('.'); let html = `${CnyItem?.symbol}${cnyArr[0]}.${cnyArr[1]}` let rateHtml = `${symbol.symbol}${arr[0]}.${arr[1]}` if (flag) { if (symbol.code === 'CNY') { const USDItem = rateList.find(item => item.code === 'USD'); const usdArr = (price / (USDItem?.rate || 1)).toFixed(2).split('.'); rateHtml = `${USDItem.symbol}${usdArr[0]}.${usdArr[1]}` } return `${html} ≈ ${rateHtml}`; }; return `${CnyItem.symbol}${CnyMoney} ≈ ${symbol.symbol}${newMoney}` } export const TimeOut = (callback = () => { }, time = 2000) => { let timer = setTimeout(() => { callback(); clearTimeout(timer); }, time) return timer; } export const getDeviceInfo = () => { return uni.getDeviceInfo(); } export const getEnterOptions = () => { return uni.getEnterOptionsSync() } export const urlStrToArr = (str = "", separator = ",") => { return str .split(separator) .map((item) => item.trim()) .filter((item) => item); } export const openUrlBlank = (url) => { if (!url || typeof url !== 'string') { console.error('无效的 URL:', url); return; } // #ifdef H5 window.open(url, '_blank'); // #endif // #ifdef APP-PLUS plus.runtime.openURL(url) // #endif };