12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036 |
- // 加密 sha1 md5
- var encrypt = require('./encrypt.js');
- // 缓存
- var cache = require('./cache.js');
- // 数学精确计算
- var math = require('./math.js');
- // 腾讯位置服务
- var qqMap = require("./qqmap-wx-jssdk");
- // 二维码
- var qrCode = require("./weapp.qrcode.min");
- module.exports = {
- /**
- * 小程序基本配置
- */
- config: {
- name: '船百知',
- debug: false, //开发模式true,生产环境改为false;
- version: 'xcx',
- baseUrl: 'https://ship-expert.zhousi.hdlkeji.com',
- qqMap: false,
- loading: false
- },
- /**
- * sha1加密
- * @param str
- * @param raw 加密方式 1str_sha1 0hex_sha1
- */
- sha1: function(str, raw) {
- return encrypt.sha1(str, raw);
- },
- /**
- * md5加密
- * @param str
- */
- md5: function(str) {
- return encrypt.md5(str);
- },
- /**
- * 缓存
- */
- cache: cache,
- /**
- * 数字精确计算
- */
- math: math,
- /**
- * 腾讯地图
- */
- qqMap: qqMap,
- /**
- * 消息提示
- * @param title
- * @param icon:success,error,loading,none
- * @param success
- * @param time
- * @param mask
- */
- info: function(title, icon, success, time, mask) {
- if (typeof icon == 'function') {
- success = icon;
- icon = "none";
- }
- title = title == undefined ? "系统繁忙" : title;
- icon = icon == undefined ? "none" : icon;
- time = time == undefined ? 1000 : time;
- mask = mask == undefined ? true : mask;
- uni.showToast({
- title: title,
- icon: icon,
- mask: mask,
- duration: time,
- success: setTimeout(function() {
- success && success()
- }, time)
- });
- },
- /**
- * 确认提示框
- * @param {Object} content
- * @param {Object} success
- * @param {Object} cancel
- * @param {Object} confirmText
- * @param {Object} cancelText
- */
- modal: function(content, success, cancel, confirmText, cancelText) {
- let opt = {};
- opt.title = this.config.name;
- opt.content = content;
- // 默认不显示取消
- opt.showCancel = false;
- if (typeof cancel == 'function' || (typeof cancel == 'boolean' && cancel)) {
- opt.showCancel = true;
- } else if (typeof cancel == 'string') {
- cancelText = confirmText;
- confirmText = cancel;
- }
- if (!this.isEmpty(confirmText)) {
- opt.confirmText = confirmText;
- }
- if (!this.isEmpty(cancelText)) {
- opt.cancelText = cancelText;
- opt.showCancel = true;
- }
- opt.success = function(res) {
- if (res.confirm) {
- success && success();
- } else if (res.cancel) {
- typeof cancel == 'function' && cancel();
- }
- };
- uni.showModal(opt);
- },
- /**
- * loading 提示框
- * @param title
- */
- loading: function(title) {
- var that = this;
- title = typeof title == 'string' ? title : "加载中...";
- !that.config.loading && uni.showLoading({
- title: title,
- mask: true,
- success: function() {
- that.config.loading = true;
- }
- });
- },
- /**
- * 关闭loading 提示框
- */
- closeLoading: function() {
- var that = this;
- that.config.loading && uni.hideLoading({
- noConflict: true,
- success: function() {
- that.config.loading = false;
- }
- });
- },
- /**
- * 判断登录
- * @param {Object} type 0不跳转登录 1跳转登录
- * @param {Object} success
- */
- login: function(type, success) {
- if (typeof type == 'function') {
- success = type;
- type = 1;
- } else if (typeof type == 'undefined') {
- type = 1;
- }
- var that = this;
- /* var userInfo = this.getUserInfo();
- if (this.isEmpty(userInfo)) {
- if (type == 1) {
- that.info('请先登录', function() {
- var pages = getCurrentPages();
- var route = pages[pages.length - 1].route;
- // if (route != 'pages/login/choose') {
- // that.jump('/pages/login/choose');
- // }
- });
- }
- return false;
- } */
- // return success && success(userInfo) || userInfo;
- return success
- },
- /**
- * 页面跳转
- * @param url
- * @param type
- */
- jump: function(url, type, params) {
- var that = this;
- if (that.isEmpty(url) && type !== -1) return false;
- if (url === -1) {
- var delta = type || 1;
- type = url;
- } else if (type === -1) {
- var delta = 1;
- if (params && params.delta) {
- delta = params.delta;
- }
- }
- type = type || 0, //默认0
- params = params || {};
- if (that.isEmpty(params)) {
- cache.remove('jump_data');
- } else {
- cache.set('jump_data', params);
- }
- switch (type) {
- case -1:
- //关闭当前页面,返回上一页面或多级页面 delta:1 返回层数
- setTimeout(function() {
- uni.navigateBack({
- delta: delta
- });
- }, 800);
- return;
- case 0:
- //保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面
- uni.navigateTo({
- url: url
- });
- return;
- case 1:
- //关闭当前页面,跳转到应用内的某个页面
- uni.redirectTo({
- url: url
- });
- return;
- case 2:
- //关闭所有页面,打开到应用内的某个页面
- uni.reLaunch({
- url: url
- });
- return;
- case 3:
- //跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
- uni.switchTab({
- url: url
- });
- return;
- default:
- return false;
- }
- },
- /**
- * 数据请求
- */
- req: function(option, onsuccess, onerror, oncomplete) {
- if (option == 'undefined') return false;
- this.loading()
- // console.log('请求',option);
- var that = this,
- config = {
- sign: false, //是否签名数据
- load: false, //是否显示loading提示
- login: false, //是否需要登录
- url: false,
- data: option.data,
- header: {
- 'content-type': 'application/x-www-form-urlencoded',
- 'api-token': uni.getStorageSync('token').token?uni.getStorageSync('token').token:'',
- 'api-name': 'wxapp'
- },
- method: option.method?option.method:'GET',
- dataType: 'json',
- success: function(res) { //通讯成功
- that.jslog('请求:' + option.url);
- that.jslog(res.data);
- that.closeLoading()
- //获取返回数据
- res = res.data;
- //如果存在回调,优先执行回调函数
- if (onsuccess) {
- if (onsuccess(res) === false) {
- return;
- }
- }
- if (typeof(res) == 'object') {
- // (res.info && res.info != 'success') && that.info(res.info);
- /* if (res.status == 98) { //未登录或账号不存在
- cache.remove('user_info');
- that.login();
- } else if (res.status == 99) { //token验证失败
- cache.remove('token');
- } */
- if(res.code == 401) {
- that.info(res.info)
- setTimeout(function() {
- that.jump('/pages/login/password_login')
- }, 2000)
- }
- if(res.code == 0) {
- that.info(res.info)
- // setTimeout(function() {
- // that.jump('/pages/login/password_login')
- // }, 2000)
- }
- } else {
- // that.modal('接口异常');
- }
- },
- fail: function(res) { //通讯失败
- that.jslog('请求:' + option.url);
- that.jslog(res);
- onerror && onerror();
- },
- complete: function(res) { //通讯完成
- option.load && that.closeLoading();
- oncomplete && oncomplete();
- }
- };
- option.data && (option.data = option.data);
- if (option.url) {
- option.url = that.config.baseUrl + option.url;
- } else {
- return false;
- }
- option = that.extend({}, config, option);
- if (option.login && !that.login()) {
- return false;
- }
- // if (!option.data.submit) {
- // option.data.submit = 'yes';
- // }
- if (option.sign) {
- that.getsign(option.data, function(res) {
- option.data = res;
- option.load && that.loading(option.load);
- uni.request(option);
- })
- } else {
- option.load && that.loading(option.load);
- uni.request(option);
- }
- },
-
- /**
- * 获取一个Token,登录成功请清空
- * @param {function} callback :回调函数
- */
- gettoken: function(callback) {
- var that = this,
- token = cache.get('token'),
- timestamp = Date.parse(new Date()) / 1000;
- // 10分钟缓冲
- if (token && token.date_expire > (timestamp + 600)) return callback({
- status: 1,
- data: token
- });
- var uuid = that.uuid(),
- //clientid=that.getClientId(),
- uid = that.getUserInfo('id', 0);
- uni.request({
- url: that.config.baseUrl + 'token',
- data: {
- uuid: uuid,
- uid: uid,
- timestamp: timestamp
- }, //clientid:clientid
- timeout: 10000, //超时时间设置为10秒
- success: function(res) {
- var res = res.data;
- if (res.status == 1) {
- cache.set('token', res.data);
- }
- return callback(res);
- },
- complete: function(res) {
- that.jslog('获取token:' + res);
- }
- });
- },
- /**
- * 数据签名
- * @param {string} data:要签名的数据
- * @param {function} onsuccess:成功回调函数
- * @param {function} onerror:失败回调函数
- */
- getsign: function(param, onsuccess, onerror) {
- var that = this,
- arr = [];
- param._sign_uuid = that.uuid();
- param._sign_uid = that.getUserInfo('id', 0);
- param._timestamp = Date.parse(new Date()) / 1000;
- param._version = that.config.version;
- that.gettoken(function(res) {
- if (res.status == 1) {
- param._sign_token = res.data.token;
- for (var i in param) {
- if (!that.isEmpty(param[i], true)) {
- arr.push(i + '=' + param[i]);
- }
- }
- arr.sort();
- param._sign = encrypt.sha1(arr.join('&') + res.data.token).toUpperCase();
- return onsuccess(param);
- } else {
- return onerror && onerror(res.info) || that.info(res.info);
- }
- });
- },
- /**
- * 格式化参数(password加密)
- * @param {string} query:参数
- */
- formatparam: function(query) {
- var json = {};
- if (typeof(query) == 'object') {
- for (var i in query) {
- if (i.indexOf('password') > -1) {
- query[i] = encrypt.md5(encrypt.sha1(query[i]));
- }
- }
- return query;
- } else {
- var vars = query.split('&');
- for (var i = 0; i < vars.length; i++) {
- var pair = vars[i].split('=');
- if (pair[0].indexOf('password') != -1) {
- pair[1] = encrypt.md5(encrypt.sha1(pair[1]));
- } else {
- pair[1] = pair[1];
- }
- if (typeof json[pair[0]] === 'undefined') {
- json[pair[0]] = pair[1];
- } else if (typeof json[pair[0]] === 'string') {
- var arr = [json[pair[0]], pair[1]];
- json[pair[0]] = arr;
- } else {
- json[pair[0]].push(pair[1]);
- }
- }
- return json;
- }
- },
- /**
- * 判断是否数组
- *
- * 1. 通过object类型的副属性class判断,
- * 其中函数的class是Function,结果是[object Function]
- * 普通的对象是Object,结果是[object Object]
- * Object.prototype.toString.call(arr) === '[object Array]'
- * 2. 通过原型去判断
- * arr.constructor === Array
- * Array.prototype.isPrototypeOf(arr)
- * arr.__proto__ === Array.prototype
- * Object.getPrototypeOf(arr) === Array.prototype
- * arr instanceof Array
- * 3. es6新增方法
- * Array.isArray(arr)
- */
- isArray: function(arr) {
- return arr && typeof(arr) == 'object' && Object.prototype.toString.call(arr) === '[object Array]';
- },
- /**
- * 否判断指定参数是否是一个纯粹的对象
- * 所谓"纯粹的对象",就是通过"{}"或"new Object"创建的,不包括数组等对象
- *
- * 1. 通过object类型的副属性class判断
- * Object.prototype.toString.call(obj) === '[object Object]'
- * 2. 通过原型去判断
- * obj.constructor === Object
- * obj instanceof Object(数组也是对象,所以 arr instanceof Object 也为true)
- * 3. typeof
- * typeof obj(除了{},null和[]也是'object')
- */
- isPlainObject: function(obj) {
- if (Object.getPrototypeOf) {
- return obj && typeof(obj) == 'object' && Object.getPrototypeOf(obj) == Object.prototype;
- } else {
- return obj && typeof(obj) == 'object' && Object.prototype.toString.call(obj) == "[object Object]" &&
- !obj.length;
- }
- },
- /**
- * 获取对象大小
- * @param object
- */
- getLength: function(object) {
- return Object.keys(object).length
- },
- /**
- * 判断两个Json(纯粹)对象是否一样
- * @param objA
- * @param objB
- */
- compareJsonObj: function(objA, objB) {
- if (!this.isPlainObject(objA) || !this.isPlainObject(objB)) return false; //判断类型是否正确
- return this.compareObj(objA, objB); //默认为true
- },
- /**
- * 判断两个对象是否一样
- * @param objA
- * @param objB
- * @param flag
- */
- compareObj: function(objA, objB, flag) {
- if (this.getLength(objA) != this.getLength(objB)) return false;
- flag = flag || true;
- for (var key in objA) {
- if (!flag) //flag为false,则跳出整个循环
- break;
- if (!objB.hasOwnProperty(key)) { //是否有自身属性,而不是继承的属性
- flag = false;
- break;
- }
- if (!this.isArray(objA[key])) { //子级不是数组时,比较属性值
- if (this.isPlainObject(objA[key])) {
- if (this.isPlainObject(objB[key])) {
- if (!flag) //这里跳出循环是为了不让递归继续
- break;
- flag = this.compareObj(objA[key], objB[key], flag);
- } else {
- flag = false;
- break;
- }
- } else {
- if (String(objB[key]) != String(objA[key])) { //排除数字比较的类型差异
- flag = false;
- break;
- }
- }
- } else {
- if (!this.isArray(objB[key])) {
- flag = false;
- break;
- }
- var oA = objA[key],
- oB = objB[key];
- if (oA.length != oB.length) {
- flag = false;
- break;
- }
- for (var k in oA) {
- if (!flag) //这里跳出循环是为了不让递归继续
- break;
- flag = this.compareObj(oA[k], oB[k], flag);
- }
- }
- }
- return flag;
- },
- /**
- * 将一个或多个对象的内容合并到目标对象
- * @param Object target 目标对象,其他对象的成员属性将被附加到该对象上
- * @param Object target 目标对象,第一个被合并的对象
- * @param Object target 目标对象,第二个被合并的对象
- */
- extend: Object.assign || function(target, source, deep) {
- for (key in source) {
- if (deep && (this.isPlainObject(source[key]) || this.isArray(source[key]))) {
- if (this.isPlainObject(source[key]) && !this.isPlainObject(target[key])) {
- target[key] = {};
- }
- if (this.isArray(source[key]) && !this.isArray(target[key])) {
- target[key] = [];
- }
- this.extend(target[key], source[key], deep);
- } else if (source[key] !== undefined) {
- target[key] = source[key];
- }
- }
- return target;
- },
- /**
- * 判断一个对象是否为空
- * @param {string} string:要判断的参数
- * @param {string} is_zero:是否要判断'0'
- */
- isEmpty: function(string, is_zero = false) {
- if (is_zero && string === '0') {
- return true;
- }
- // 0 == '',false == '',[] == ''
- if (string == '' || string == null || typeof(string) == 'undefined' || string == 'undefined') {
- return true;
- }
- // 对象 和 数组
- if (typeof(string) == 'object') {
- return this.getLength(string) ? false : true;
- }
- return false;
- },
- /**
- * 为客户端生成一个唯一的uuid
- */
- uuid: function() {
- var uuid,
- random = function() {
- return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
- };
- uuid = cache.get('uuid');
- if (!uuid) {
- uuid = encrypt.sha1(random() + random() + '-' + random() + '-' + random() + '-' + random() + '-' +
- random() + random() + random());
- cache.set('uuid', uuid);
- }
- return uuid;
- },
- /**
- * 获取设备唯一标识
- */
- getClientId: function() {
- //获取客户端ID
- var clientid = cache.get('client_id');
- if (clientid) return clientid;
- //TODO::
- },
- /**
- * 获取用户登录信息
- * @param k 键值
- * @param d 入没有返回的默认值
- */
- getUserInfo: function(k, d) {
- if (d == 'undefined') {
- d = 0;
- }
- var userInfo = cache.get('user_info');
- if (this.isEmpty(userInfo)) {
- return d;
- } else {
- if (typeof k == 'undefined') {
- return userInfo;
- } else {
- if (typeof userInfo[k] == 'undefined') {
- return d;
- } else {
- return userInfo[k];
- }
- }
- }
- },
- /**
- * 查找指定值的元素在数组中第一次出现的位置
- * 查找指定键的值的元素在二维数组中第一次出现的位置
- * @param arr 数组
- * @param val 要查找的值
- * @param key 二维数组元素的值对应的键
- */
- indexOf: function(arr, val, key) {
- if (this.isEmpty(arr) || this.isEmpty(val)) return -1;
- if (typeof key == 'undefined') {
- for (let i = 0; i < arr.length; i++) {
- if (arr[i] == val) {
- return i;
- }
- }
- } else {
- for (let i = 0; i < arr.length; i++) {
- if (arr[i][key] == val) {
- return i;
- }
- }
- }
- return -1;
- },
- /**
- * (批量)删除数组中指定值的元素
- * (批量)删除二维数组中指定键的值的元素
- * @param {Object} arr (二维)数组
- * @param {Object} vals 值(数组)
- * @param {Object} key 值(数组)组对应的键
- */
- removeItemByVals: function(arr, vals, key) {
- var that = this;
- if (this.isEmpty(arr) || this.isEmpty(vals)) return arr;
- if (this.isArray(vals)) {
- //!倒序删除
- if (typeof key == 'undefined') {
- for (let i = arr.length - 1; i >= 0; i--) {
- let index = that.indexOf(vals, arr[i]);
- if (index > -1) {
- arr.splice(i, 1);
- }
- }
- } else {
- for (let i = arr.length - 1; i >= 0; i--) {
- let index = that.indexOf(vals, arr[i][key]);
- if (index > -1) {
- arr.splice(i, 1);
- }
- }
- }
- } else {
- let index = this.indexOf(arr, vals, key);
- if (index > -1) {
- arr.splice(index, 1);
- }
- }
- return arr;
- },
- /**
- * 批量删除数组中指定键的元素
- * @param {Object} arr 数组
- * @param {Object} indexs 序号(数组)
- */
- removeItemByIndex: function(arr, indexs) {
- var that = this;
- if (this.isEmpty(arr) || this.isEmpty(indexs)) return arr;
- if (this.isArray(indexs)) {
- //!倒序删除
- for (let i = arr.length - 1; i >= 0; i--) {
- let index = that.indexOf(indexs, i);
- if (index > -1) {
- arr.splice(i, 1);
- }
- }
- } else {
- arr.splice(indexs, 1);
- }
- return arr;
- },
- /**
- * 返回数组中某个单一列的值
- */
- array_column: function(arr, key) {
- if (this.isEmpty(arr)) return arr;
- if (this.isEmpty(key)) return [];
- var vals = [];
- arr.forEach(item => {
- vals.push(item[key]);
- });
- return vals;
- },
- /**
- * 对象按照key排序
- * @param {Object} arr
- */
- array_ksort: function(arr) {
- let sorted = {},
- keys = Object.keys(arr);
- keys.sort();
- keys.forEach((key) => {
- sorted[key] = arr[key];
- })
- return sorted;
- },
- /**
- * 数组按元素(指定键值)排序
- * @param {Object} arr
- * @param {Object} key
- * @param {Object} sort asc desc
- */
- array_vsort: function(arr, key, sort) {
- if (this.isEmpty(arr)) return arr;
- key = key || '';
- sort = sort || 'asc';
- if (key == '') {
- return arr.sort();
- } else {
- if (sort == 'asc') {
- return arr.sort(function(a, b) {
- return a[key] - b[key];
- });
- } else {
- return arr.sort(function(a, b) {
- return b[key] - a[key];
- });
- }
- }
- },
- /**
- * 日期时间格式化
- * @param {Object} date 日期对象
- */
- formatDate: function({
- value = '',
- mode = ''
- }) {
- var date = value
- var that = this;
- if(that.isEmpty(date,true)) {
- date = new Date();
- } else {
- if (typeof date == 'number') {
- date = new Date(parseInt(date));
- } else if (typeof date == 'string') {
- date = new Date(date);
- }
- }
- var value1 = ''
- let Y = date.getFullYear();
- let M = +(date.getMonth()+1 < 10 ? '0' +(date.getMonth()+1) : date.getMonth()+1) ;
- let D = date.getDate();
- let h = date.getHours();
- let m = date.getMinutes();
- let s = date.getSeconds();
- if(mode == 'year-month') {
- value1 = Y+ '-'+ M
- } else {
- value1 = Y+ '-'+M+ '-'+D
- }
- return value1
- },
- /**
- * 日期时间格式化
- * @param {Object} date 日期对象
- * @param {Object} type 增加加的时间间隔:y年 q季度(3个月) m月 d天
- * @param {Object} number 增加的时间间隔的个数
- * @param {Object} format 格式化样式
- */
- formatDate1: function({
- date = '',
- type = 'y',
- number = 0,
- format = 'Y-m-d'
- }) {
- var that = this;
- if (that.isEmpty(date, true)) {
- date = new Date();
- } else {
- if (typeof date == 'number') {
- date = new Date(parseInt(date) * 1000);
- } else if (typeof date == 'string') {
- date = new Date(date);
- }
- }
- date = that.addDate(type, number, date);
- var zero = function(value) {
- if (value < 10) {
- return '0' + value;
- }
- return value;
- },
- year = date.getFullYear(),
- month = zero(date.getMonth() + 1),
- day = zero(date.getDate());
- // hour = zero(date.getHours()),
- // minite = zero(date.getMinutes()),
- // second = zero(date.getSeconds());
- return format.replace(/Y|m|d/ig, function(matches) {
- return ({
- Y: year,
- m: month,
- d: day,
- // H: hour,
- // i: minite,
- // s: second,
- })[matches];
- });
- },
- /**
- * 日期时间计算
- * addDate(type,number,date)
- * @param {Object} type 增加的时间间隔:y年 q季度(3个月) m月 d天
- * @param {Object} number 增加的时间间隔的个数
- * @param {Object} date 开始日期对象
- * @return {type} 新的日期对象
- * var now = new Date();
- * var newDate = addDate( "d", 5, now);
- */
- addDate: function(type, number, date) {
- switch (type) {
- case "y": {
- date.setFullYear(date.getFullYear() + number);
- return date;
- break;
- }
- case "q": {
- date.setMonth(date.getMonth() + number * 3);
- return date;
- break;
- }
- case "m": {
- date.setMonth(date.getMonth() + number);
- return date;
- break;
- }
- case "w": {
- date.setDate(date.getDate() + number * 7);
- return date;
- break;
- }
- case "d": {
- date.setDate(date.getDate() + number);
- return date;
- break;
- }
- case "h": {
- date.setHours(date.getHours() + number);
- return date;
- break;
- }
- case "m": {
- date.setMinutes(date.getMinutes() + number);
- return date;
- break;
- }
- case "s": {
- date.setSeconds(date.getSeconds() + number);
- return date;
- break;
- }
- default: {
- date.setDate(date.getDate() + number);
- return date;
- break;
- }
- }
- },
- /**
- * 二维码操作
- * @param {Object} canvas 图片路径
- * @param {Object} action 操作类型
- * qrcode:绘制二维码(根据内容data)
- * scan:扫描二维码
- * @param {Object} canvas 绘制二维码canvasID
- * @param {Object} data 绘制二维码内容
- * @param {Object} camera 扫描二维码是否只使用相机
- * @param {Object} success 成功回调
- * @param {Object} error 失败回调
- */
- qrCodeOperat({
- action = 'qrcode',
- canvas,
- data,
- camera = false,
- success,
- error
- }) {
- var that = this;
- switch (action) {
- case 'qrcode':
- qrCode({
- width: 180,
- height: 180,
- x: 20,
- y: 20,
- canvasId: canvas,
- text: data,
- });
- break;
- case 'scan':
- uni.scanCode({
- onlyFromCamera: camera,
- success(res) {
- if (res.errMsg == 'scanCode:ok') {
- // 二维码内容 res.result
- success && success(res.result);
- } else {
- error && error(res);
- }
- },
- fail(res) {
- if (res.errMsg != 'scanCode:fail cancel') {
- error && error(res);
- }
- }
- });
- break;
- default:
- that.modal('请明确二维码操作类型');
- }
- },
- /**
- * 图片操作
- * @param {Object} path 图片路径
- * @param {Object} action 操作类型
- * choose:选择图片
- * upload:图片上传
- * info:图片信息
- * read:读取图片(base64)
- * write:保存图片(base64)
- * down:下载图片
- * save:保存图片(临时路径)
- * preview:图片预览
- * @param {Object} data 保存图片:图片base64内容(不带 data:image/png;base64,),
- * 图片预览:图片数组
- * @param {Object} fileName 保存图片的名称
- * @param {Object} menu 图片预览:是否显示长按菜单
- * @param {Object} count 图片选择:默认图片选择数量
- * @param {Object} success 成功回调
- * @param {Object} error 失败回调
- */
- imageOperat({
- action = 'choose',
- path,
- fileName = 'write',
- data,
- count = 1,
- menu = true,
- success,
- error
- }) {
- var that = this;
- if (action == 'choose') {
- uni.chooseImage({
- count: count,
- sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
- sourceType: ['camera', 'album'], //相册选择、使用相机
- success: (e) => {
- e.tempFilePaths.forEach((item) => {
- success && success(item);
- });
- },
- fail(e) {
- error && error(e);
- }
- });
- } else if (action == 'upload') {
- uni.uploadFile({
- url: that.config.baseUrl + '/api/Publics/uploadLocality',
- filePath: path,
- name: 'upfile',
- /* header: {
- 'content-type': 'multipart/form-data'
- }, */
- formData: {
- // uid: that.getUserInfo('id', 0)
- file: path
- },
- success(e) {
- console.log(e)
- let res = JSON.parse(e.data);
- if (res.status == 1) {
- success && success(res);
- } else {
- error && error({
- errMsg: res.info
- });
- }
- },
- fail(e) {
- error && error(e);
- }
- });
- } else if (action == 'info') {
- uni.getImageInfo({
- src: path,
- success(e) {
- if (e.errMsg == 'getImageInfo:ok') {
- //e.height e.width e.type
- success && success(e);
- } else {
- error && error(e);
- }
- },
- fail(e) {
- error && error(e);
- }
- });
- } else if (action == 'read') {
- uni.getFileSystemManager().readFile({
- filePath: path,
- encoding: 'base64',
- position: 0,
- success(e) {
- if (e.errMsg == 'readFile:ok') {
- //let img = 'data:image/png;base64,' + e.data.replace(/[\r\n]/g, "");
- success && success(e);
- } else {
- error && error(e);
- }
- },
- fail(e_t) {
- error && error(e);
- }
- });
- } else if (action == 'write') {
- let filePath = `${uni.env.USER_DATA_PATH}/${fileName}.png`;
- uni.getFileSystemManager().writeFile({
- filePath: filePath,
- data: data,
- encoding: 'base64',
- success(e) {
- if (e.errMsg == 'writeFile:ok') {
- success && success(filePath);
- } else {
- error && error(e);
- }
- },
- fail(e) {
- console.log(e);
- error && error(e);
- }
- });
- } else if (action == 'down') {
- uni.downloadFile({
- url: path,
- success(e) {
- if (e.errMsg === 'downloadFile:ok') {
- //e.tempFilePath
- success && success(e);
- } else {
- error && error(e);
- }
- },
- fail(e) {
- error && error(e);
- }
- })
- } else if (action == 'save') {
- let filePath = `${uni.env.USER_DATA_PATH}/${fileName}.png`;
- uni.getFileSystemManager().saveFile({
- tempFilePath: path,
- filePath: filePath,
- success(e) {
- if (e.errMsg == 'saveFile:ok') {
- success && success(filePath);
- } else {
- error && error(e);
- }
- },
- fail(e) {
- console.log(e);
- error && error(e);
- }
- });
- } else if (action == 'preview') {
- uni.previewImage({
- currnet: path,
- urls: data,
- showmenu: menu
- });
- }
- },
- /**
- * 视频操作
- */
- viedoOperat({
- action = 'choose',
- count = 1, //上传视频的个数
- mediaType = ['video'], //限制上传的类型为video
- sourceType = ['album', 'camera'], //视频选择来源
- maxDuration = 58, //拍摄限制时间
- camera = 'back', //采用后置摄像头
- filePath,
- path,
- size = 20,
- success,
- error
- }) {
- var that = this
- if (action == 'choose') {
- uni.chooseMedia({
- count: count,
- mediaType: mediaType,
- sourceType: sourceType,
- maxDuration: maxDuration,
- camera: camera,
- success(e) {
- console.log(e)
- if (e.errMsg == 'chooseMedia:ok') {
- e.tempFiles.forEach((item) => {
- let sel_size = parseFloat(item.size / 1024 / 1024).toFixed(1)
- if (sel_size > size) {
- let beyongSize = sel_size - size //获取视频超出限制大小的数量
- that.info("上传的视频大小超限,超出" + beyongSize + "MB,请重新上传!")
- error && error();
- } else {
- success && success(item);
- }
- });
- } else {
- error && error(e);
- }
- },
- fail(e) {
- console.log(e);
- error && error(e);
- }
- })
- }
- //压缩视频
- if (action == 'compress') {
- uni.compressVideo({
- quality: 'high',
- src: filePath,
- success(e) {
- console.log(e)
- if (e.errMsg == 'compressVideo:ok') {
- // e.tempFiles.forEach((item) => {
- success && success(e);
- // });
- } else {
- error && error(e);
- }
- },
- fail(e) {
- console.log(e);
- error && error(e);
- }
- })
- }
- },
- /**
- * 位置服务
- * @param {Object} action 操作类型
- * getLocation: 获取当前的地理位置、速度
- * openLocation: 使用微信内置地图查看位置
- * chooseLocation: 打开地图选择位置
- * choosePoi: 打开 POI 列表选择位置
- * getLatLng: 获取指定地址经纬度
- * getAreaCode: 根据经纬度获取区划信息
- * getDistance: 计算2个经纬度之间的距离
- * @param {Object} type 返回坐标类型: wgs84返回gps坐标,gcj02 返回可用于 uni.openLocation 的坐标
- * @param {Object} address 查询地址: '北京市海淀区彩和坊路海淀西大街74号'
- * @param {Object} from 计算距离起点坐标,默认当前位置
- * {latitude: 0, longitude: 0}
- * @param {Object} to 计算距离终点坐标
- * [{latitude: 0, longitude: 0}]
- * @param {Object} success 成功回调
- * @param {Object} error 失败回调
- */
- locationOperat({
- action = 'getLocation',
- type = 'gcj02',
- address,
- from = '',
- to,
- success,
- error
- }) {
- var that = this;
- if (action == 'getLocation') {
- uni.getLocation({
- type: type,
- success(e) {
- if (e.errMsg == 'getLocation:ok') {
- success && success(e);
- } else {
- error && error(e);
- }
- },
- fail(e) {
- error && error(e);
- }
- });
- } else if (action == 'openLocation') {
- var {
- latitude,
- longitude
- } = from;
- uni.openLocation({
- latitude: latitude,
- longitude: longitude,
- success(e) {
- if (e.errMsg == 'openLocation:ok') {
- success && success(e);
- } else {
- error && error(e);
- }
- },
- fail(e) {
- error && error(e);
- }
- });
- } else if (action == 'chooseLocation') {
- var {
- latitude = '',
- longitude = ''
- } = from;
- uni.chooseLocation({
- latitude: latitude,
- longitude: longitude,
- success(e) {
- if (e.errMsg == 'chooseLocation:ok') {
- success && success(e);
- } else {
- error && error(e);
- }
- },
- fail(e) {
- error && error(e);
- }
- });
- } else if (action == 'choosePoi') {
- var {
- latitude = '',
- longitude = ''
- } = from;
- uni.choosePoi({
- success(e) {
- if (e.errMsg == 'choosePoi:ok') {
- success && success(e);
- } else {
- error && error(e);
- }
- },
- fail(e) {
- error && error(e);
- }
- });
- } else if (action == 'getLatLng') {
- new qqMap({
- key: that.config.qqMapKey
- }).geocoder({
- address: address,
- success(e) {
- if (e.status == 0 && e.message == 'query ok') {
- success && success(e.result);
- } else {
- error && error(e);
- }
- },
- fail(e) {
- error && error(e);
- }
- });
- } else if (action == 'getAreaCode') {
- new qqMap({
- key: that.config.qqMapKey
- }).reverseGeocoder({
- success(e) {
- if (e.status == 0 && e.message == 'query ok') {
- success && success(e.result);
- } else {
- error && error(e);
- }
- },
- fail(e) {
- error && error(e);
- }
- });
- } else if (action == 'getDistanceApi') {
- new qqMap({
- key: that.config.qqMapKey
- }).calculateDistance({
- from: from, //若起点有数据则采用起点坐标,若为空默认当前地址
- to: to,
- success(e) {
- if (e.status == 0 && e.message == 'query ok') {
- success && success(e.result.elements);
- } else {
- error && error(e);
- }
- },
- fail(e) {
- error && error(e);
- }
- });
- } else if (action == 'getDistanceMath') { // 返回KM
- var {
- latitude: lat1 = '',
- longitude: lng1 = ''
- } = from;
- if (lat1 == '' && lng1 == '') {
- return 0;
- }
- var {
- latitude: lat2 = '',
- longitude: lng2 = ''
- } = to;
- var toRad = function(d) {
- return d * Math.PI / 180;
- };
- var dis = 0;
- var deltaLng = toRad(lng1) - toRad(lng2);
- var radLat1 = toRad(lat1);
- var radLat2 = toRad(lat2);
- var deltaLat = radLat1 - radLat2;
- var dis = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(deltaLat / 2), 2) + Math.cos(radLat1) * Math.cos(
- radLat2) * Math.pow(Math.sin(deltaLng / 2), 2)));
- return that.math.toFixed(dis * 6378.137, 2); // km
- }
- },
- /**
- * 过滤emoji
- * @param {Object} str
- */
- filterEmoji: function(str) {
- return str.replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g, '');
- },
- /**
- * 打印对象
- * @param obj
- */
- jslog: function(obj) {
- this.config.debug && console.log(JSON.stringify(obj));
- },
- /**
- * form表单数据校验
- * @param value
- * @param rule
- */
- formCheck: function(value, rule, error) {
- var that = this;
- var regs = {
- required: [
- /[\s\S]+/,
- '必填项不能为空',
- ],
- english: [
- /^[a-zA-Z]+$/,
- '必填项只能由大小写字母组成',
- ],
- mobile: [
- /^1[3|4|5|7|8|9][0-9]\d{4,8}$/,
- '请输入正确的手机号',
- ],
- phone: [
- /^(\d{3,4}-?)?\d{7,9}$/g,
- '请输入正确的电话号码',
- ],
- email: [
- /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,
- '请输入正确的电子邮箱'
- ],
- url: [
- /(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/,
- '请输入正确的链接'
- ],
- number: [
- /^\d+$/,
- '必填项只能填数字'
- ],
- code4: [
- /^\d{4}$/,
- '请输入正确的手机验证码'
- ],
- code6: [
- /^\d{6}$/,
- '请输入正确的手机验证码'
- ],
- captcha4: [
- /^[0-9a-zA-Z]{4}$/,
- '请输入正确的图片验证码'
- ],
- date: [
- /^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/,
- '请输入正确的日期格式'
- ],
- identity: [
- /(^\d{15}$)|(^\d{17}(x|X|\d)$)/,
- '请输入正确的身份证号'
- ],
- username: [
- /^[a-zA-Z0-9\u4e00-\u9fa5-_\.]{2,12}$/,
- '请输入正确的帐号(只能包含中文、英文、数字、下划线等字符)'
- ],
- password: [
- /^\w{6,16}$/,
- '请输入正确的密码(6-16位数字,字母或符号)'
- ],
- passwords: [
- /^[a-zA-Z]+\w{5,12}$/,
- '请输入正确的密码(以字母开头,长度在6-12之间)'
- ],
- pwd: [
- /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9a-zA-Z]{6,12}$/,
- '请输入正确的密码(6-12位数字+字母组合)'
- ],
- invite: [
- /^[0-9a-zA-Z]{10}$/,
- '邀请码为8位数字或字母组合'
- ],
- truename: [
- /^[\u4e00-\u9fa5]{2,4}$/,
- '请输入正确的真实姓名(2-4个汉字)'
- ],
- money: [
- /((^[1-9]\d*)|^0)(\.\d{0,2}){0,1}$/,
- '请输入正确的金额'
- ]
- };
- var reg = regs[rule];
- if (that.isEmpty(reg)) {
- return true;
- } else {
- if (value == '' || !RegExp(reg[0]).test(value)) {
- that.info(error || reg[1]);
- return false;
- }
- return true;
- }
- },
- /****************************************************/
- /**
- *获取系统信息
- * @param label 获取系统的某一项信息
- * screenWidth 屏幕宽度,
- * screenHeight 屏幕高度,单位px
- * windowWidth 单位px可使用窗口宽度,单位px
- * windowHeight 可使用窗口高度,单位px
- * statusBarHeight 状态栏的高度,单位px
- * menuButton:右上角胶囊按钮的布局位置信息,坐标信息以屏幕左上角为原点
- * width 宽度,单位:px
- * height 高度,单位:px
- * top 上边界坐标,单位:px
- * right 右边界坐标,单位:px
- * bottom 下边界坐标,单位:px
- * left 左边界坐标,单位:px
- */
- getSystemInfo(success) {
- // 获取系统状态栏信息
- uni.getSystemInfo({
- success: (res) => {
- if (res.errMsg == 'getSystemInfo:ok') {
- res.menuButton = uni.getMenuButtonBoundingClientRect();
- success && success(res);
- } else {
- that.modal('获取系统信息失败:' + res.errMsg);
- }
- },
- fail: (res) => {
- that.modal('获取系统信息失败:' + res.errMsg);
- }
- });
- },
- /**
- * 检查登录
- */
- getSessionKey: function(success) {
- let that = this;
- let data = {};
- data.openid = cache.get('open_id');
- data.session_key = cache.get('session_key');
- // 都存在
- if (!that.isEmpty(data.session_key) && !that.isEmpty(data.openid)) {
- uni.checkSession({
- success() {
- success && success(data);
- },
- fail() {
- cache.remove('open_id');
- cache.remove('session_key');
- that.getOpenId(success);
- }
- });
- } else {
- cache.remove('open_id');
- cache.remove('session_key');
- that.getOpenId(success);
- }
- },
- /**
- * 获取openid
- * @param success
- */
- getOpenId: function(success, error) {
- var that = this;
- that.loading();
- uni.login({
- success: (e) => {
- that.req({
- url: 'public/getOpenid',
- data: {
- code: e.code
- },
- login: false,
- load: false
- }, function(res) {
- if (res.status == 1) {
- cache.set('open_id', res.data.openid);
- cache.set('session_key', res.data.session_key);
- success && success(res.data);
- } else {
- that.modal('微信登录失败:' + res.info, function() {
- error && error();
- });
- return false;
- }
- }, function() {}, function() {
- that.closeLoading();
- });
- },
- fail: (e) => {
- that.closeLoading();
- that.modal('微信登录失败:' + e.errMsg, function() {
- error && error();
- });
- }
- });
- },
- /**
- * 登录
- * @param {Object} data
- * @param {Object} success
- * @param {Object} error
- */
- doLogin: function(data, success, error) {
- var that = this;
- data.loginsubmit = 'yes';
- this.req({
- url: 'account/login',
- data: data,
- login: false
- }, function(res) {
- if (res.status == 1) {
- cache.set('user_info', res.data);
- success && success(res.data);
- } else {
- error && error(res);
- }
- });
- },
- /**
- * 注册
- * @param {Object} data
- * @param {Object} success
- * @param {Object} error
- */
- doRegist: function(data, success, error) {
- var that = this;
- data.registsubmit = 'yes';
- this.req({
- url: 'account/register',
- data: data,
- login: false
- }, function(res) {
- if (res.status == 1) {
- cache.set('user_info', res.data);
- success && success(res.data);
- } else {
- error && error(res);
- }
- });
- },
- /**
- * 查询是否注册
- * @param {Object} success
- * @param {Object} error
- */
- checkRegist: function(success, error) {
- var that = this;
- that.getSessionKey(function(data) {
- that.req({
- url: 'account/checkRegist',
- data: {
- open_id: data.openid,
- registsubmit: 'yes'
- },
- login: false,
- load: false
- }, function(res) {
- if (res.status == 1) {
- success && success();
- } else {
- error && error();
- }
- });
- });
- },
- /**
- * 获取会员信息
- * @param {Object} success
- * @param {Object} error
- */
- getMemberInfo: function(success, error) {
- var that = this;
- this.req({
- url: 'center/getMemberInfo',
- load: false
- }, function(res) {
- if (res.status == 1) {
- cache.set('user_info', res.data);
- success && success(res.data);
- } else {
- error && error(res);
- }
- });
- },
- /**
- * 获取用户微信资料
- * @param success
- */
- getUserProfile: function(success, error) {
- var that = this;
- that.loading('获取微信信息中...');
- uni.getUserProfile({
- lang: 'zh_CN',
- desc: '用于完善会员资料',
- success: (res) => {
- if (res.errMsg == 'getUserProfile:ok') {
- // 过滤掉emoji
- res.userInfo.nickName = that.filterEmoji(res.userInfo.nickName);
- success(res.userInfo);
- } else {
- that.modal('获取微信信息失败:' + res.errMsg, function() {
- error && error(res);
- });
- }
- },
- fail: (res) => {
- that.modal('获取微信信息失败:' + res.errMsg, function() {
- console.log(res)
- error && error(res);
- });
- },
- complete: () => {
- that.closeLoading();
- }
- });
- },
- /**
- * 获取配置信息
- * @param success
- */
- getConfigInfo: function({
- source = 'system',
- label = '',
- success
- }) {
- this.req({
- url: 'public/configInfo',
- data: {
- source: source,
- label: label
- },
- login: false,
- load: false
- }, function(res) {
- success(res.data);
- });
- },
- /**
- * 获取微信手机号
- * @param e
- * @param success
- */
- getMobile: function(e, success) {
- var that = this;
- that.getSessionKey(function(data) {
- if (e.detail.errMsg == 'getPhoneNumber:ok') {
- that.req({
- url: 'public/getMobile',
- data: {
- encryptedData: e.detail.encryptedData,
- iv: e.detail.iv,
- sessionKey: data.session_key
- },
- login: false
- }, function(res) {
- if (res.status == 1) {
- success(res.data);
- } else {
- that.modal('获取手机号失败' + res.info);
- return false;
- }
- });
- } else {
- that.modal('获取手机号失败' + e.detail.errMsg);
- }
- });
- },
- /**
- * 拨打电话
- * @param mobile
- */
- makeCall: function(mobile) {
- uni.makePhoneCall({
- phoneNumber: mobile
- });
- },
- /**
- * 修改页面标题
- * @param title
- */
- changeNavBarTitle: function(title) {
- uni.setNavigationBarTitle({
- title: title
- });
- },
- /**
- * 检查版本更新
- */
- checkUpdate: function() {
- if (uni.canIUse('getUpdateManager')) {
- const updateManager = uni.getUpdateManager()
- updateManager.onCheckForUpdate(function(res) {
- if (res.hasUpdate) {
- updateManager.onUpdateReady(function() {
- uni.showModal({
- title: '更新提示',
- content: '新版本已经准备好,是否重启应用?',
- success: function(res) {
- if (res.confirm) {
- updateManager.applyUpdate()
- }
- }
- })
- })
- updateManager.onUpdateFailed(function() {
- uni.showModal({
- title: '已经有新版本了~',
- content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开~'
- })
- })
- }
- })
- } else {
- uni.showModal({
- title: '提示',
- content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
- })
- }
- },
- /**
- * html转义
- * @param {object} str //需要转义内容
- * @param {object} success
- */
- escape2Html(str, success) {
- var arrEntities = {
- 'lt': '<',
- 'gt': '>',
- 'nbsp': ' ',
- 'amp': '&',
- 'quot': '"'
- };
- return str.replace(/&(lt|gt|nbsp|amp|quot);/ig, function(all, t) {
- return arrEntities[t];
- }).replace(/<section/g, '<div').replace(/<u>/g, '').replace(/<u style="">/g, '').replace(/<\/u>/g, '');
- },
- /**
- * 分享信息
- */
- shareInfo: function() {
- var that = this;
- var userInfo = cache.get('user_info');
- if (!that.isEmpty(userInfo) && !that.isEmpty(userInfo.serial)) {
- var path = `/pages/index/index?invite_code=${userInfo.serial}`;
- } else {
- var path = '/pages/index/index';
- }
- return {
- title: that.config.name,
- path: path,
- // imageUrl: '/image/iconimg/login.png'
- };
- },
- /**
- * 检测是否收藏
- * @param {object} id //检测是否收藏的商品id
- * @param {object} success
- */
- checkStore(id, key, success) {
- var that = this
- var shopStore = cache.get(key);
- if (that.isEmpty(shopStore)) {
- success && success(false)
- } else {
- var have = 0
- for (let i in shopStore) {
- var d = shopStore[i];
- if (d.id == id) {
- // 有收藏
- have = 1
- success && success(true)
- break;
- }
- if (have == 0) {
- // 无收藏
- success && success(false)
- }
- }
- }
- },
- /**
- * 收藏缓存
- * @param {object} id //需要收藏或取消的商品id
- * @param {object} success
- */
- changeStore(data, key, success) {
- var shopStore = cache.get(key);
- var that = this
- var p = {}
- p = data
- if (that.isEmpty(shopStore)) {
- var shopStore = []
- shopStore.push(p);
- cache.set(key, shopStore);
- success && success('收藏成功')
- } else {
- var have = 0
- for (let i in shopStore) {
- var d = shopStore[i];
- console.log(d, data)
- if (d.id == data.id && d.table == data.table) {
- // 有的话取消收藏
- have = 1
- shopStore.splice(i, 1);
- cache.set(key, shopStore);
- success && success('取消成功')
- break;
- }
- }
- if (have == 0) {
- // 没有的话收藏
- shopStore.push(p);
- cache.set(key, shopStore);
- success && success('收藏成功')
- }
- }
- },
- /****************************************************/
- /**
- * 获取购物车信息,设置导航红点信息
- * @param index 设置信息 tabBar 序号
- */
- getshopcar: function(success) {
- var shopCar_list = cache.get('shop_car');
- if (this.isEmpty(shopCar_list)) {
- uni.hideTabBarRedDot({ //隐藏 tabBar 某一项的右上角文本
- index: 2, //第几个 tabBar,从左边 0 算起
- success: function() {
- success && success(0);
- }
- });
- } else {
- var len = this.getLength(shopCar_list);
- uni.setTabBarBadge({ //为 tabBar 某一项的右上角添加文本
- index: 2, //第几个 tabBar,从左边 0 算起
- text: String(len), //右上角添加的文本
- success: function() {
- success && success(len);
- }
- });
- }
- },
- /**
- * 上拉刷新加载数据
- * @param {object} type
- * @param {object} page
- * @param {object} succes
- */
- onReachFoot: function(url, data, succes) {
- //type=1时请求找工作
- if (url) {
- this.req({
- url: url,
- data: data
- }, function(res) {
- if (res.status == 1) {
- succes && succes(res.data);
- }
- })
- } else {
- succes && success(false)
- }
- },
- /**
- * 电话聊天控制
- * @param price 价格
- * @param mobile 手机号
- * @param work_id 工作或求职id
- * @param {String} type 类型,work招工,worker求职
- * @param {String} buy_type 购买类型 pirce电话,chat_price聊天
- * @param send_id 被购买的用户id
- * @param send_name 被购买的名字
- */
- /* makeCall(price, mobile, work_id, type, buy_type, send_id, send_name = '') {
- var that = this
- that.modal('将自动使用会员次数或东豆进行抵扣', function(params) {
- that.req({
- url: 'center/MobileOrMessage',
- data: {
- price: price,
- mobile: mobile,
- work_id: work_id,
- type: type,
- buy_type: buy_type,
- send_id: send_id,
- send_name: send_name
- }
- }, function(params) {
- if (params.status == 1) {
- if (buy_type == 'price') {
- uni.makePhoneCall({
- phoneNumber: mobile,
- })
- } else {
- that.jump('/pages/chat/chat?id=' + send_id + '&nickname=' + send_name)
- }
- }
- if (params.status == 2) {
- }
- })
- }, true)
- }, */
- /**
- * 微信小程序防抖
- * @param func 防抖事件
- * @param wait 阻止时间
- */
- debounce: function(func, wait) {
- let timeout;
- return function() {
- console.log('防抖事件:' + func, '防抖时间:' + wait)
- let context = this
- let args = arguments
- let later = () => {
- timeout = null
- func.apply(context, args)
- }
- clearTimeout(timeout)
- timeout = setTimeout(later, wait)
- }
- }
- }
|