123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428 |
- // +----------------------------------------------------------------------
- // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
- // +----------------------------------------------------------------------
- // | Author: CRMEB Team <admin@crmeb.com>
- // +----------------------------------------------------------------------
- // import uniCopy from '@/js_sdk/xb-copy/uni-copy.js'; // 拷贝功能插件
- // import compressImage from './compressImage.js'; // 解决图片旋转90°问题
- // const device = uni.getSystemInfoSync();
- // console.log("device:======================== " + JSON.stringify(device));
- /*
- 参数说明
- @url
- 要跳转的目标地址
- @opt
- 要传给目标地址的参数
- 可在目标页面的onLoad生命周期函数的第一个参数中获取
- */
- // 压栈跳转页面
- export function navigateTo(type, url, opt) {
- // H5端页面跳转目前不支持动画 (浏览器性能限制)
- let toUrl = url;
- let api = 'navigateTo';
- toUrl = opt ? toUrl + '?' + convertObj(opt) : toUrl;
- switch (type) {
- case 1:
- api = 'navigateTo';
- break;
- case 2:
- api = 'redirectTo'; // 关闭当前页,跳转应用内某个页面
- break;
- case 3:
- api = 'reLaunch'; // 关闭所有页面,打开到应用内某个页面
- break;
- case 4:
- api = 'switchTab'; //跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。
- break;
- default:
- api = 'navigateTo'
- break;
- }
- uni[api]({
- url: toUrl,
- animationType: 'slide-in-right',
- animationDuration: 200
- });
- }
- // 关闭当前页面并返回上一页面 delta 标识返回几层
- export function navigateBack(delta) {
- uni.navigateBack({
- delta: delta
- });
- }
- // setStorage 将数据存入缓存
- export function setStorage(key, val) {
- if (typeof val == 'string') {
- uni.setStorageSync(key, val);
- return val
- }
- uni.setStorageSync(key, JSON.stringify(val));
- }
- // getStorage 从缓存中读取数据
- export function getStorage(key) {
- let uu = uni.getStorageSync(key);
- try {
- if (typeof JSON.parse(uu) != 'number') {
- uu = JSON.parse(uu);
- }
- } catch (e) {}
- return uu;
- }
- // 删除缓存中的数据
- export function removeStorage(key) {
- if (key) {
- uni.removeStorageSync(key);
- }
- }
- // 将缓存中的数据清空
- export function clearStorage() {
- try {
- uni.clearStorageSync();
- } catch (e) {
- throw new Error('处理失败');
- }
- }
- // 显示Toast
- /*
- @title 最多汉字数量7个
- @icon success loading none
- */
- export function Toast(title, icon = 'none', obj = {}, duration = 800) {
- let toastData = {
- title: title,
- duration: duration,
- position: 'center',
- mask: true,
- icon: icon ? icon : 'none',
- ...obj
- };
- uni.showToast(toastData);
- }
- /*
- 显示loading提示框,需要手动隐藏
- */
- export function Loading(title = '正在加载...', obj = {}) {
- uni.showLoading({
- title: title,
- mask: true,
- ...obj
- });
- }
- // 隐藏loading
- export function hideLoading() {
- try {
- uni.hideLoading();
- } catch (e) {
- //TODO handle the exception
- throw new Error('处理失败');
- }
- }
- // 模态框
- /*
- 确定取消按钮的文字颜色可修改
- obj 对象中传入 cancelColor : rgb 即可修改取消按钮颜色
- obj 对象中传入 confirmColor : rgb 即可修改确认按钮颜色
- */
- export function Modal(title = '提示', content = '这是一个模态弹窗!', obj = {
- showCancel: true,
- cancelText: '取消',
- confirmText: '确定'
- }) {
- return new Promise((reslove, reject) => {
- uni.showModal({
- title: title,
- content: content,
- success: (res) => {
- if (res.confirm) {
- reslove()
- }
- if (res.cancel) {
- reject()
- }
- }
- });
- })
- }
- /*
- 显示操作菜单
- @itemList 操作菜单数组
- @itemColor 文字颜色
- */
- export function ActionSheet(itemList, itemColor = "#000000") {
- return new Promise((reslove, reject) => {
- uni.showActionSheet({
- itemList: itemList,
- itemColor: itemColor,
- success: (res) => {
- reslove(res.tapIndex);
- },
- fail: function(res) {
- reject(res.errMsg);
- }
- });
- })
- }
- //将页面滚动到目标位置。
- export function ScrollTo(ScrollTop) {
- uni.pageScrollTo({
- scrollTop: ScrollTop,
- duration: 300
- })
- }
- // 获取用户信息
- export function GetUserInfo() {
- return new Promise((reslove, reject) => {
- uni.getUserInfo({
- success(res) {
- console.log(res);
- reslove(res);
- },
- fail(rej) {
- reject(rej);
- }
- })
- })
- }
- // 获取用户授权信息
- export function Authorize(scoped = 'scope.userInfo') {
- return new Promise((reslove, reject) => {
- uni.authorize({
- scope: scoped,
- success(res) {
- reslove(res);
- },
- fail(rej) {
- reject(rej);
- }
- })
- })
- }
- // 将对象转换成使用 & 连接的字符串
- export function convertObj(opt) {
- let str = '';
- let arr = [];
- Object.keys(opt).forEach(item => {
- arr.push(`${item}=${opt[item]}`);
- })
- str = arr.join('&');
- return str;
- }
- // 节流函数
- // 节流函数
- export function throttle(fn, delay) {
- var lastArgs;
- var timer;
- var delay = delay || 200;
- return function(...args) {
- lastArgs = args;
- if(!timer){
- timer = setTimeout(()=>{
- timer = null;
- fn.apply(this, lastArgs);
- }, delay);
- }
- }
- }
- // 调起相机
- export function chooseImage(count) {
- return new Promise((reslove, reject) => {
- uni.chooseImage({
- count: count, //默认9
- sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
- sourceType: ['album', 'camera'], //从相册选择
- success: (res) => {
- reslove(res);
- },
- fail: (rej) => {
- reject(rej);
- }
- });
- })
- }
- //序列化对象和数组
- export function serialize(data) {
- if (data != null && data != '') {
- try {
- return JSON.parse(JSON.stringify(data));
- } catch (e) {
- if (data instanceof Array) {
- return [];
- }
- return {};
- }
- }
- return data;
- }
- Date.prototype.format = function(fmt) {
- let o = {
- 'M+': this.getMonth() + 1, //月份
- 'd+': this.getDate(), //日
- 'h+': this.getHours(), //小时
- 'm+': this.getMinutes(), //分
- 's+': this.getSeconds(), //秒
- 'q+': Math.floor((this.getMonth() + 3) / 3), //季度
- S: this.getMilliseconds() //毫秒
- };
- if (/(y+)/.test(fmt)) {
- fmt = fmt.replace(RegExp.$1, String(this.getFullYear()).substr(4 - RegExp.$1.length));
- }
- for (let k in o) {
- if (new RegExp('(' + k + ')').test(fmt)) {
- fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(String(o[k]).length));
- }
- }
- return fmt;
- };
- //格式化日期
- export function formatDate(nS, format) {
- //日期格式化
- if (!nS) {
- return '';
- }
- format = format || 'yyyy-MM-dd hh:mm:ss';
- return new Date(nS).format(format);
- }
- // 图片转base64
- export function pathToBase64(path) {
- return new Promise(function(resolve, reject) {
- if (typeof window === 'object' && 'document' in window) {
- if (typeof FileReader === 'function') {
- var xhr = new XMLHttpRequest()
- xhr.open('GET', path, true)
- xhr.responseType = 'blob'
- xhr.onload = function() {
- if (this.status === 200) {
- let fileReader = new FileReader()
- fileReader.onload = function(e) {
- resolve(e.target.result)
- }
- fileReader.onerror = reject
- fileReader.readAsDataURL(this.response)
- }
- }
- xhr.onerror = reject
- xhr.send()
- return
- }
- var canvas = document.createElement('canvas')
- var c2x = canvas.getContext('2d')
- var img = new Image
- img.onload = function() {
- canvas.width = img.width
- canvas.height = img.height
- c2x.drawImage(img, 0, 0)
- resolve(canvas.toDataURL())
- canvas.height = canvas.width = 0
- }
- img.onerror = reject
- img.src = path
- return
- }
- if (typeof plus === 'object') {
- plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) {
- entry.file(function(file) {
- var fileReader = new plus.io.FileReader()
- fileReader.onload = function(data) {
- resolve(data.target.result)
- }
- fileReader.onerror = function(error) {
- reject(error)
- }
- fileReader.readAsDataURL(file)
- }, function(error) {
- reject(error)
- })
- }, function(error) {
- reject(error)
- })
- return
- }
- if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
- wx.getFileSystemManager().readFile({
- filePath: path,
- encoding: 'base64',
- success: function(res) {
- resolve('data:image/png;base64,' + res.data)
- },
- fail: function(error) {
- reject(error)
- }
- })
- return
- }
- reject(new Error('not support'))
- })
- }
- // 获取本周的第一天
- export function showWeekFirstDay() {
- var date = new Date();
- var weekday = date.getDay() || 7; //获取星期几,getDay()返回值是 0(周日) 到 6(周六) 之间的一个整数。0||7为7,即weekday的值为1-7
- date.setDate(date.getDate() - weekday + 1); //往前算(weekday-1)天,年份、月份会自动变化
- return formatDate(date, 'yyyy-MM-dd');
- }
- // 获取本月第一天
- export function showMonthFirstDay() {
- var MonthFirstDay = new Date().setDate(1);
- return formatDate(new Date(MonthFirstDay).getTime(), 'yyyy-MM-dd');
- }
- var now = new Date(); //当前日期
- var nowMonth = now.getMonth(); //当前月
- var nowYear = now.getYear(); //当前年
- nowYear += (nowYear < 2000) ? 1900 : 0; //
- //获得本季度的开始月份
- function getQuarterStartMonth() {
- var quarterStartMonth = 0;
- if(nowMonth < 3) {
- quarterStartMonth = 0;
- }
- if(2 < nowMonth && nowMonth < 6) {
- quarterStartMonth = 3;
- }
- if(5 < nowMonth && nowMonth < 9) {
- quarterStartMonth = 6;
- }
- if(nowMonth > 8) {
- quarterStartMonth = 9;
- }
- return quarterStartMonth;
- }
- //或的本季度的结束日期
- //获得本季度的开始日期
- export function getQuarterStartDate() {
- var quarterStartDate = new Date(nowYear, getQuarterStartMonth(), 1);
- return formatDate(quarterStartDate, 'yyyy-MM-dd');
- }
- // 删除数组中重复数据
- export function unique(data) {
- data = data || [];
- var n = {};//存放新的数据
- for(var i = 0; i < data.length; i++) {
- var v = JSON.stringify(data[i]);
- if(typeof (v) == "undefined") {
- n[v] = 1;
- }
- }
- data.length = 0;
- for(var i in n) {
- data[data.length] = i;
- }
- return data;
- }
|