You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

235 lines
5.0 KiB
JavaScript

1 year ago
// #ifdef H5
var clipboardJS = require('./clipboardJS');
// #endif
/**
* 预览图片
@param {Object} url 必填 当前预览的图片链接
@param {Object} list 可以是url数组也可以是对象数据比如["http:url"] or [{url:"https:url",...}]
@param {Object} rangKey 如果list是对象数组需要提供url字段
*/
import { previewImg } from "./preview.js"
/**
* 数据分组
* @param {Array} oArr - 原数组列表
* @param {Number} length - 单个数组长度
* @return {Array} arr - 分组后的新数组
*/
function splitData(oArr = [], length = 1) {
let arr = [];
let minArr = [];
oArr.forEach(c => {
if (minArr.length === length) {
minArr = [];
}
if (minArr.length === 0) {
arr.push(minArr);
}
minArr.push(c);
});
return arr;
}
/**
* 剩余时间格式化
* @param {Number} t - 剩余多少秒
* @return {Object} format - 格式后的天时分秒对象
*/
function timeMuch(t) {
let format = {
d: '00',
h: '00',
m: '00',
s: '00'
};
if (t > 0) {
let d = Math.floor(t / 86400);
let h = Math.floor((t / 3600) % 24);
let m = Math.floor((t / 60) % 60);
let s = Math.floor(t % 60);
format.d = d < 10 ? '0' + d : d;
format.h = h < 10 ? '0' + h : h;
format.m = m < 10 ? '0' + m : m;
format.s = s < 10 ? '0' + s : s;
}
return format;
}
/**
* 打电话
* @param {String<Number>} phoneNumber - 数字字符串
* @return {Promise}
*/
function callPhone(phoneNumber = '') {
let num = phoneNumber.toString()
return new Promise((rs,rj)=>{
uni.makePhoneCall({
phoneNumber: num,
success:()=> rs(),
fail:(err)=> rj(err)
});
})
}
/**
* 调起客户端相机扫码
* @param {Boolean} onlyFromCamera true 是否只允许相机扫码识别
* @param {Array<string>} scanType ['barCode', 'qrCode', 'datamatrix','datamatrix']
* @returns Promise 成功返回相关数据结构
*/
function scanCode(onlyFromCamera = true, scanType = ['barCode', 'qrCode', 'datamatrix','datamatrix']){
// #ifdef H5
return Promise.reject('不支持H5');
// #endif
return new Promise((rs,rj)=>{
uni.scanCode({
onlyFromCamera: onlyFromCamera,
scanType: scanType,
success: (res) => rs(res),
fail:(error)=>rj(error)
});
})
}
/**
* 设置剪切板内容
* @param {String} data
* @returns Promise true/false
*/
function setClipboardData(data){
// #ifndef H5
return new Promise((rs,rj)=>{
uni.setClipboardData({
data: data,
success:()=>rs(true),
fail:(error)=>rj(error)
});
})
// #endif
// #ifdef H5
return new Promise((rs,rj)=>{
let btn = document.createElement('button');
btn.style.display = 'none';
btn.className='hi-test-hi';
document.body.appendChild(btn);
clipboardJS = clipboardJS.bind(window);
let cb = new clipboardJS('.hi-test-hi', {
text: () => data
})
cb.on('success', function (res) {
rs(true);
})
cb.on('error', function (err) {
rj(err)
})
btn.click = btn.click.bind(window.document.body.querySelector('.hi-test-hi'))
btn.click()
})
// #endif
}
/**
* 获取剪切板内容
* @returns Promise 剪切板内容
*/
function getClipboardData(){
// #ifndef H5
return new Promise((rs, rj) => {
uni.getClipboardData({
success: (res) => rs(res.data),
fail: (error) => rj(error)
});
})
// #endif
// #ifdef H5
return Promise.reject('H5无法获取剪切板内容')
// #endif
}
/**
* 设置cookie数据
* @param {String} key 键值
* @param {String} data
* @returns Boolean
*/
function setCookie(key, data) {
try {
uni.setStorageSync(key, data);
return true;
} catch (e) {
return false;
}
}
/**
* 删除一个本地cookie
* @param {String} key 键值
* @returns Boolean
*/
function delCookie(key) {
try {
uni.removeStorageSync(key);
return true;
} catch (e) {
return false;
}
}
/**
* 获取一个cookie数据
* 如果存入的是对象返回的也是对象如果是string返回的也是字符串
* @param {String} key
* @returns json/string
*/
function getCookie(key) {
try {
const value = uni.getStorageSync(key);
try {
let val = JSON.parse(value)
return val;
} catch (e) {
return value;
}
} catch (e) {
return undefined;
}
}
/**
* 向地址连接追加参数
* @param {string} uri 网址
* @param {string} key 字段
* @param {string} value 字段值
* @returns
*/
function httpUrlAddKey(uri, key, value) {
if (!value) {
return uri;
}
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
var separator = uri.indexOf("?") !== -1 ? "&" : "?";
if (uri.match(re)) {
return uri.replace(re, "$1" + key + "=" + value + "$2");
} else {
return uri + separator + key + "=" + value;
}
}
export default {
previewImg,//预览图片。
splitData,//数据分组
timeMuch,//剩余时间格式化
callPhone,//打电话
scanCode,//调起客户端相机扫码。
setClipboardData, //设置剪切板内容。
getClipboardData,//获取剪切板内容
setCookie,//设置cookie数据
delCookie,//删除一个本地cookie
getCookie,//获取一个cookie数据
httpUrlAddKey,//向地址连接追加参数
}