diff --git a/App.vue b/App.vue index 99eac60..e1e15cf 100644 --- a/App.vue +++ b/App.vue @@ -16,14 +16,16 @@ this.globalData.hostapi = 'https://7and5.cn'; // #endif // #ifdef H5 - this.globalData.hostapi = 'https://7and5.cn'; - // this.globalData.hostapi = '/web'; + // this.globalData.hostapi = 'https://7and5.cn'; + this.globalData.hostapi = '/web'; // #endif }, onShow: function() { // if(uni.getStorageSync('token')){ - // // 刷新token - // this.$toolAll.tools.refreshToken(); + // 刷新token + // this.$toolAll.tools.refreshToken(); + // 每十分钟更新用户地理位置 + this.$toolAll.tools.renewLocationEv(); // } }, onHide: function() { diff --git a/jsFile/base64-png.js b/jsFile/base64-png.js new file mode 100644 index 0000000..e5433a4 --- /dev/null +++ b/jsFile/base64-png.js @@ -0,0 +1,23 @@ +const fsm = wx.getFileSystemManager(); +const FILE_BASE_NAME = 'tmp_base64src'; //自定义文件名 + +function base64src(base64data, cb) { + const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64data) || []; + if (!format) { + return (new Error('ERROR_BASE64SRC_PARSE')); + } + const filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.${format}`; + const buffer = wx.base64ToArrayBuffer(bodyData); + fsm.writeFile({ + filePath, + data: buffer, + encoding: 'binary', + success() { + cb(filePath); + }, + fail() { + return (new Error('ERROR_BASE64SRC_WRITE')); + }, + }); +}; +module.exports = base64src; diff --git a/jsFile/map/qqmap-wx-jssdk.min.js b/jsFile/map/qqmap-wx-jssdk.min.js new file mode 100644 index 0000000..4922185 --- /dev/null +++ b/jsFile/map/qqmap-wx-jssdk.min.js @@ -0,0 +1,891 @@ +var ERROR_CONF = { + KEY_ERR: 311, + KEY_ERR_MSG: 'key格式错误', + PARAM_ERR: 310, + PARAM_ERR_MSG: '请求参数信息有误', + SYSTEM_ERR: 600, + SYSTEM_ERR_MSG: '系统错误', + WX_ERR_CODE: 1000, + WX_OK_CODE: 200 +}; +var BASE_URL = 'https://apis.map.qq.com/ws/'; +var URL_SEARCH = BASE_URL + 'place/v1/search'; +var URL_SUGGESTION = BASE_URL + 'place/v1/suggestion'; +var URL_GET_GEOCODER = BASE_URL + 'geocoder/v1/'; +var URL_CITY_LIST = BASE_URL + 'district/v1/list'; +var URL_AREA_LIST = BASE_URL + 'district/v1/getchildren'; +var URL_DISTANCE = BASE_URL + 'distance/v1/'; +var URL_DIRECTION = BASE_URL + 'direction/v1/'; +var MODE = { + driving: 'driving', + transit: 'transit' +}; +var EARTH_RADIUS = 6378136.49; +var Utils = { + safeAdd(x, y) { + var lsw = (x & 0xffff) + (y & 0xffff); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xffff) + }, + bitRotateLeft(num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)) + }, + md5cmn(q, a, b, x, s, t) { + return this.safeAdd(this.bitRotateLeft(this.safeAdd(this.safeAdd(a, q), this.safeAdd(x, t)), s), b) + }, + md5ff(a, b, c, d, x, s, t) { + return this.md5cmn((b & c) | (~b & d), a, b, x, s, t) + }, + md5gg(a, b, c, d, x, s, t) { + return this.md5cmn((b & d) | (c & ~d), a, b, x, s, t) + }, + md5hh(a, b, c, d, x, s, t) { + return this.md5cmn(b ^ c ^ d, a, b, x, s, t) + }, + md5ii(a, b, c, d, x, s, t) { + return this.md5cmn(c ^ (b | ~d), a, b, x, s, t) + }, + binlMD5(x, len) { + x[len >> 5] |= 0x80 << (len % 32); + x[((len + 64) >>> 9 << 4) + 14] = len; + var i; + var olda; + var oldb; + var oldc; + var oldd; + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; + for (i = 0; i < x.length; i += 16) { + olda = a; + oldb = b; + oldc = c; + oldd = d; + a = this.md5ff(a, b, c, d, x[i], 7, -680876936); + d = this.md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = this.md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = this.md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = this.md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = this.md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = this.md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = this.md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = this.md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = this.md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = this.md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = this.md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = this.md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = this.md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = this.md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = this.md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + a = this.md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = this.md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = this.md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = this.md5gg(b, c, d, a, x[i], 20, -373897302); + a = this.md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = this.md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = this.md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = this.md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = this.md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = this.md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = this.md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = this.md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = this.md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = this.md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = this.md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = this.md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + a = this.md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = this.md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = this.md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = this.md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = this.md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = this.md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = this.md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = this.md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = this.md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = this.md5hh(d, a, b, c, x[i], 11, -358537222); + c = this.md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = this.md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = this.md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = this.md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = this.md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = this.md5hh(b, c, d, a, x[i + 2], 23, -995338651); + a = this.md5ii(a, b, c, d, x[i], 6, -198630844); + d = this.md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = this.md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = this.md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = this.md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = this.md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = this.md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = this.md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = this.md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = this.md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = this.md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = this.md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = this.md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = this.md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = this.md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = this.md5ii(b, c, d, a, x[i + 9], 21, -343485551); + a = this.safeAdd(a, olda); + b = this.safeAdd(b, oldb); + c = this.safeAdd(c, oldc); + d = this.safeAdd(d, oldd) + } + return [a, b, c, d] + }, + binl2rstr(input) { + var i; + var output = ''; + var length32 = input.length * 32; + for (i = 0; i < length32; i += 8) { + output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff) + } + return output + }, + rstr2binl(input) { + var i; + var output = []; + output[(input.length >> 2) - 1] = undefined; + for (i = 0; i < output.length; i += 1) { + output[i] = 0 + } + var length8 = input.length * 8; + for (i = 0; i < length8; i += 8) { + output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32) + } + return output + }, + rstrMD5(s) { + return this.binl2rstr(this.binlMD5(this.rstr2binl(s), s.length * 8)) + }, + rstrHMACMD5(key, data) { + var i; + var bkey = this.rstr2binl(key); + var ipad = []; + var opad = []; + var hash; + ipad[15] = opad[15] = undefined; + if (bkey.length > 16) { + bkey = this.binlMD5(bkey, key.length * 8) + } + for (i = 0; i < 16; i += 1) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5c5c5c5c + } + hash = this.binlMD5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8); + return this.binl2rstr(this.binlMD5(opad.concat(hash), 512 + 128)) + }, + rstr2hex(input) { + var hexTab = '0123456789abcdef'; + var output = ''; + var x; + var i; + for (i = 0; i < input.length; i += 1) { + x = input.charCodeAt(i); + output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f) + } + return output + }, + str2rstrUTF8(input) { + return unescape(encodeURIComponent(input)) + }, + rawMD5(s) { + return this.rstrMD5(this.str2rstrUTF8(s)) + }, + hexMD5(s) { + return this.rstr2hex(this.rawMD5(s)) + }, + rawHMACMD5(k, d) { + return this.rstrHMACMD5(this.str2rstrUTF8(k), str2rstrUTF8(d)) + }, + hexHMACMD5(k, d) { + return this.rstr2hex(this.rawHMACMD5(k, d)) + }, + md5(string, key, raw) { + if (!key) { + if (!raw) { + return this.hexMD5(string) + } + return this.rawMD5(string) + } + if (!raw) { + return this.hexHMACMD5(key, string) + } + return this.rawHMACMD5(key, string) + }, + getSig(requestParam, sk, feature, mode) { + var sig = null; + var requestArr = []; + Object.keys(requestParam).sort().forEach(function(key) { + requestArr.push(key + '=' + requestParam[key]) + }); + if (feature == 'search') { + sig = '/ws/place/v1/search?' + requestArr.join('&') + sk + } + if (feature == 'suggest') { + sig = '/ws/place/v1/suggestion?' + requestArr.join('&') + sk + } + if (feature == 'reverseGeocoder') { + sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk + } + if (feature == 'geocoder') { + sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk + } + if (feature == 'getCityList') { + sig = '/ws/district/v1/list?' + requestArr.join('&') + sk + } + if (feature == 'getDistrictByCityId') { + sig = '/ws/district/v1/getchildren?' + requestArr.join('&') + sk + } + if (feature == 'calculateDistance') { + sig = '/ws/distance/v1/?' + requestArr.join('&') + sk + } + if (feature == 'direction') { + sig = '/ws/direction/v1/' + mode + '?' + requestArr.join('&') + sk + } + sig = this.md5(sig); + return sig + }, + location2query(data) { + if (typeof data == 'string') { + return data + } + var query = ''; + for (var i = 0; i < data.length; i++) { + var d = data[i]; + if (!!query) { + query += ';' + } + if (d.location) { + query = query + d.location.lat + ',' + d.location.lng + } + if (d.latitude && d.longitude) { + query = query + d.latitude + ',' + d.longitude + } + } + return query + }, + rad(d) { + return d * Math.PI / 180.0 + }, + getEndLocation(location) { + var to = location.split(';'); + var endLocation = []; + for (var i = 0; i < to.length; i++) { + endLocation.push({ + lat: parseFloat(to[i].split(',')[0]), + lng: parseFloat(to[i].split(',')[1]) + }) + } + return endLocation + }, + getDistance(latFrom, lngFrom, latTo, lngTo) { + var radLatFrom = this.rad(latFrom); + var radLatTo = this.rad(latTo); + var a = radLatFrom - radLatTo; + var b = this.rad(lngFrom) - this.rad(lngTo); + var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLatFrom) * Math.cos( + radLatTo) * Math.pow(Math.sin(b / 2), 2))); + distance = distance * EARTH_RADIUS; + distance = Math.round(distance * 10000) / 10000; + return parseFloat(distance.toFixed(0)) + }, + getWXLocation(success, fail, complete) { + wx.getLocation({ + type: 'gcj02', + success: success, + fail: fail, + complete: complete + }) + }, + getLocationParam(location) { + if (typeof location == 'string') { + var locationArr = location.split(','); + if (locationArr.length === 2) { + location = { + latitude: location.split(',')[0], + longitude: location.split(',')[1] + } + } else { + location = {} + } + } + return location + }, + polyfillParam(param) { + param.success = param.success || function() {}; + param.fail = param.fail || function() {}; + param.complete = param.complete || function() {} + }, + checkParamKeyEmpty(param, key) { + if (!param[key]) { + var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + key + '参数格式有误'); + param.fail(errconf); + param.complete(errconf); + return true + } + return false + }, + checkKeyword(param) { + return !this.checkParamKeyEmpty(param, 'keyword') + }, + checkLocation(param) { + var location = this.getLocationParam(param.location); + if (!location || !location.latitude || !location.longitude) { + var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + ' location参数格式有误'); + param.fail(errconf); + param.complete(errconf); + return false + } + return true + }, + buildErrorConfig(errCode, errMsg) { + return { + status: errCode, + message: errMsg + } + }, + handleData(param, data, feature) { + if (feature == 'search') { + var searchResult = data.data; + var searchSimplify = []; + for (var i = 0; i < searchResult.length; i++) { + searchSimplify.push({ + id: searchResult[i].id || null, + title: searchResult[i].title || null, + latitude: searchResult[i].location && searchResult[i].location.lat || null, + longitude: searchResult[i].location && searchResult[i].location.lng || null, + address: searchResult[i].address || null, + category: searchResult[i].category || null, + tel: searchResult[i].tel || null, + adcode: searchResult[i].ad_info && searchResult[i].ad_info.adcode || null, + city: searchResult[i].ad_info && searchResult[i].ad_info.city || null, + district: searchResult[i].ad_info && searchResult[i].ad_info.district || null, + province: searchResult[i].ad_info && searchResult[i].ad_info.province || null + }) + } + param.success(data, { + searchResult: searchResult, + searchSimplify: searchSimplify + }) + } else if (feature == 'suggest') { + var suggestResult = data.data; + var suggestSimplify = []; + for (var i = 0; i < suggestResult.length; i++) { + suggestSimplify.push({ + adcode: suggestResult[i].adcode || null, + address: suggestResult[i].address || null, + category: suggestResult[i].category || null, + city: suggestResult[i].city || null, + district: suggestResult[i].district || null, + id: suggestResult[i].id || null, + latitude: suggestResult[i].location && suggestResult[i].location.lat || null, + longitude: suggestResult[i].location && suggestResult[i].location.lng || null, + province: suggestResult[i].province || null, + title: suggestResult[i].title || null, + type: suggestResult[i].type || null + }) + } + param.success(data, { + suggestResult: suggestResult, + suggestSimplify: suggestSimplify + }) + } else if (feature == 'reverseGeocoder') { + var reverseGeocoderResult = data.result; + var reverseGeocoderSimplify = { + address: reverseGeocoderResult.address || null, + latitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lat || null, + longitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lng || null, + adcode: reverseGeocoderResult.ad_info && reverseGeocoderResult.ad_info.adcode || null, + city: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.city || + null, + district: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component + .district || null, + nation: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component + .nation || null, + province: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component + .province || null, + street: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component + .street || null, + street_number: reverseGeocoderResult.address_component && reverseGeocoderResult + .address_component.street_number || null, + recommend: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult + .formatted_addresses.recommend || null, + rough: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses + .rough || null + }; + if (reverseGeocoderResult.pois) { + var pois = reverseGeocoderResult.pois; + var poisSimplify = []; + for (var i = 0; i < pois.length; i++) { + poisSimplify.push({ + id: pois[i].id || null, + title: pois[i].title || null, + latitude: pois[i].location && pois[i].location.lat || null, + longitude: pois[i].location && pois[i].location.lng || null, + address: pois[i].address || null, + category: pois[i].category || null, + adcode: pois[i].ad_info && pois[i].ad_info.adcode || null, + city: pois[i].ad_info && pois[i].ad_info.city || null, + district: pois[i].ad_info && pois[i].ad_info.district || null, + province: pois[i].ad_info && pois[i].ad_info.province || null + }) + } + param.success(data, { + reverseGeocoderResult: reverseGeocoderResult, + reverseGeocoderSimplify: reverseGeocoderSimplify, + pois: pois, + poisSimplify: poisSimplify + }) + } else { + param.success(data, { + reverseGeocoderResult: reverseGeocoderResult, + reverseGeocoderSimplify: reverseGeocoderSimplify + }) + } + } else if (feature == 'geocoder') { + var geocoderResult = data.result; + var geocoderSimplify = { + title: geocoderResult.title || null, + latitude: geocoderResult.location && geocoderResult.location.lat || null, + longitude: geocoderResult.location && geocoderResult.location.lng || null, + adcode: geocoderResult.ad_info && geocoderResult.ad_info.adcode || null, + province: geocoderResult.address_components && geocoderResult.address_components.province || + null, + city: geocoderResult.address_components && geocoderResult.address_components.city || null, + district: geocoderResult.address_components && geocoderResult.address_components.district || + null, + street: geocoderResult.address_components && geocoderResult.address_components.street || null, + street_number: geocoderResult.address_components && geocoderResult.address_components + .street_number || null, + level: geocoderResult.level || null + }; + param.success(data, { + geocoderResult: geocoderResult, + geocoderSimplify: geocoderSimplify + }) + } else if (feature == 'getCityList') { + var provinceResult = data.result[0]; + var cityResult = data.result[1]; + var districtResult = data.result[2]; + param.success(data, { + provinceResult: provinceResult, + cityResult: cityResult, + districtResult: districtResult + }) + } else if (feature == 'getDistrictByCityId') { + var districtByCity = data.result[0]; + param.success(data, districtByCity) + } else if (feature == 'calculateDistance') { + var calculateDistanceResult = data.result.elements; + var distance = []; + for (var i = 0; i < calculateDistanceResult.length; i++) { + distance.push(calculateDistanceResult[i].distance) + } + param.success(data, { + calculateDistanceResult: calculateDistanceResult, + distance: distance + }) + } else if (feature == 'direction') { + var direction = data.result.routes; + param.success(data, direction) + } else { + param.success(data) + } + }, + buildWxRequestConfig(param, options, feature) { + var that = this; + options.header = { + "content-type": "application/json" + }; + options.method = 'GET'; + options.success = function(res) { + var data = res.data; + if (data.status === 0) { + that.handleData(param, data, feature) + } else { + param.fail(data) + } + }; + options.fail = function(res) { + res.statusCode = ERROR_CONF.WX_ERR_CODE; + param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)) + }; + options.complete = function(res) { + var statusCode = +res.statusCode; + switch (statusCode) { + case ERROR_CONF.WX_ERR_CODE: { + param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)); + break + } + case ERROR_CONF.WX_OK_CODE: { + var data = res.data; + if (data.status === 0) { + param.complete(data) + } else { + param.complete(that.buildErrorConfig(data.status, data.message)) + } + break + } + default: { + param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG)) + } + } + }; + return options + }, + locationProcess(param, locationsuccess, locationfail, locationcomplete) { + var that = this; + locationfail = locationfail || function(res) { + res.statusCode = ERROR_CONF.WX_ERR_CODE; + param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)) + }; + locationcomplete = locationcomplete || function(res) { + if (res.statusCode == ERROR_CONF.WX_ERR_CODE) { + param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)) + } + }; + if (!param.location) { + that.getWXLocation(locationsuccess, locationfail, locationcomplete) + } else if (that.checkLocation(param)) { + var location = Utils.getLocationParam(param.location); + locationsuccess(location) + } + } +}; +class QQMapWX { + constructor(options) { + if (!options.key) { + throw Error('key值不能为空') + } + this.key = options.key + }; + search(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + if (!Utils.checkKeyword(options)) { + return + } + var requestParam = { + keyword: options.keyword, + orderby: options.orderby || '_distance', + page_size: options.page_size || 10, + page_index: options.page_index || 1, + output: 'json', + key: that.key + }; + if (options.address_format) { + requestParam.address_format = options.address_format + } + if (options.filter) { + requestParam.filter = options.filter + } + var distance = options.distance || "1000"; + var auto_extend = options.auto_extend || 1; + var region = null; + var rectangle = null; + if (options.region) { + region = options.region + } + if (options.rectangle) { + rectangle = options.rectangle + } + var locationsuccess = function(result) { + if (region && !rectangle) { + requestParam.boundary = "region(" + region + "," + auto_extend + "," + result.latitude + "," + + result.longitude + ")"; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'search') + } + } else if (rectangle && !region) { + requestParam.boundary = "rectangle(" + rectangle + ")"; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'search') + } + } else { + requestParam.boundary = "nearby(" + result.latitude + "," + result.longitude + "," + distance + + "," + auto_extend + ")"; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'search') + } + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_SEARCH, + data: requestParam + }, 'search')) + }; + Utils.locationProcess(options, locationsuccess) + }; + getSuggestion(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + if (!Utils.checkKeyword(options)) { + return + } + var requestParam = { + keyword: options.keyword, + region: options.region || '全国', + region_fix: options.region_fix || 0, + policy: options.policy || 0, + page_size: options.page_size || 10, + page_index: options.page_index || 1, + get_subpois: options.get_subpois || 0, + output: 'json', + key: that.key + }; + if (options.address_format) { + requestParam.address_format = options.address_format + } + if (options.filter) { + requestParam.filter = options.filter + } + if (options.location) { + var locationsuccess = function(result) { + requestParam.location = result.latitude + ',' + result.longitude; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest') + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_SUGGESTION, + data: requestParam + }, "suggest")) + }; + Utils.locationProcess(options, locationsuccess) + } else { + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest') + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_SUGGESTION, + data: requestParam + }, "suggest")) + } + }; + reverseGeocoder(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + var requestParam = { + coord_type: options.coord_type || 5, + get_poi: options.get_poi || 0, + output: 'json', + key: that.key + }; + if (options.poi_options) { + requestParam.poi_options = options.poi_options + } + var locationsuccess = function(result) { + requestParam.location = result.latitude + ',' + result.longitude; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'reverseGeocoder') + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_GET_GEOCODER, + data: requestParam + }, 'reverseGeocoder')) + }; + Utils.locationProcess(options, locationsuccess) + }; + geocoder(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + if (Utils.checkParamKeyEmpty(options, 'address')) { + return + } + var requestParam = { + address: options.address, + output: 'json', + key: that.key + }; + if (options.region) { + requestParam.region = options.region + } + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'geocoder') + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_GET_GEOCODER, + data: requestParam + }, 'geocoder')) + }; + getCityList(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + var requestParam = { + output: 'json', + key: that.key + }; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'getCityList') + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_CITY_LIST, + data: requestParam + }, 'getCityList')) + }; + getDistrictByCityId(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + if (Utils.checkParamKeyEmpty(options, 'id')) { + return + } + var requestParam = { + id: options.id || '', + output: 'json', + key: that.key + }; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'getDistrictByCityId') + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_AREA_LIST, + data: requestParam + }, 'getDistrictByCityId')) + }; + calculateDistance(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + if (Utils.checkParamKeyEmpty(options, 'to')) { + return + } + var requestParam = { + mode: options.mode || 'walking', + to: Utils.location2query(options.to), + output: 'json', + key: that.key + }; + if (options.from) { + options.location = options.from + } + if (requestParam.mode == 'straight') { + var locationsuccess = function(result) { + var locationTo = Utils.getEndLocation(requestParam.to); + var data = { + message: "query ok", + result: { + elements: [] + }, + status: 0 + }; + for (var i = 0; i < locationTo.length; i++) { + data.result.elements.push({ + distance: Utils.getDistance(result.latitude, result.longitude, locationTo[i] + .lat, locationTo[i].lng), + duration: 0, + from: { + lat: result.latitude, + lng: result.longitude + }, + to: { + lat: locationTo[i].lat, + lng: locationTo[i].lng + } + }) + } + var calculateResult = data.result.elements; + var distanceResult = []; + for (var i = 0; i < calculateResult.length; i++) { + distanceResult.push(calculateResult[i].distance) + } + return options.success(data, { + calculateResult: calculateResult, + distanceResult: distanceResult + }) + }; + Utils.locationProcess(options, locationsuccess) + } else { + var locationsuccess = function(result) { + requestParam.from = result.latitude + ',' + result.longitude; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'calculateDistance') + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_DISTANCE, + data: requestParam + }, 'calculateDistance')) + }; + Utils.locationProcess(options, locationsuccess) + } + }; + direction(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + if (Utils.checkParamKeyEmpty(options, 'to')) { + return + } + var requestParam = { + output: 'json', + key: that.key + }; + if (typeof options.to == 'string') { + requestParam.to = options.to + } else { + requestParam.to = options.to.latitude + ',' + options.to.longitude + } + var SET_URL_DIRECTION = null; + options.mode = options.mode || MODE.driving; + SET_URL_DIRECTION = URL_DIRECTION + options.mode; + if (options.from) { + options.location = options.from + } + if (options.mode == MODE.driving) { + if (options.from_poi) { + requestParam.from_poi = options.from_poi + } + if (options.heading) { + requestParam.heading = options.heading + } + if (options.speed) { + requestParam.speed = options.speed + } + if (options.accuracy) { + requestParam.accuracy = options.accuracy + } + if (options.road_type) { + requestParam.road_type = options.road_type + } + if (options.to_poi) { + requestParam.to_poi = options.to_poi + } + if (options.from_track) { + requestParam.from_track = options.from_track + } + if (options.waypoints) { + requestParam.waypoints = options.waypoints + } + if (options.policy) { + requestParam.policy = options.policy + } + if (options.plate_number) { + requestParam.plate_number = options.plate_number + } + } + if (options.mode == MODE.transit) { + if (options.departure_time) { + requestParam.departure_time = options.departure_time + } + if (options.policy) { + requestParam.policy = options.policy + } + } + var locationsuccess = function(result) { + requestParam.from = result.latitude + ',' + result.longitude; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'direction', options.mode) + } + wx.request(Utils.buildWxRequestConfig(options, { + url: SET_URL_DIRECTION, + data: requestParam + }, 'direction')) + }; + Utils.locationProcess(options, locationsuccess) + } +}; +module.exports = QQMapWX; diff --git a/jsFile/public-api.js b/jsFile/public-api.js index 09b0e87..19ffb20 100644 --- a/jsFile/public-api.js +++ b/jsFile/public-api.js @@ -6,4 +6,24 @@ export function uploadImg(data) { // 解决方案列表接口 export function getPlanType(data) { return request.get("/universal/api.solution/solution_list", data); +} + +// 更新用户地理位置 +export function renewLocation(data) { + return request.post("/universal/api.user/update_location", data); +} + +// 搜索客户、项目、备品 +export function queryFun(data) { + return request.post("/universal/api.search/search", data); +} + + +// 处理工单,获取 +export function handleWorkOrderGet(data) { + return request.get("/universal/api.order/process_order", data); +} +// 处理工单,提交 +export function handleWorkOrderSubmit(data) { + return request.post("/universal/api.order/process_order", data); } \ No newline at end of file diff --git a/jsFile/tools.js b/jsFile/tools.js index 9a31abe..0ef4d23 100644 --- a/jsFile/tools.js +++ b/jsFile/tools.js @@ -1,5 +1,213 @@ const app = getApp(); +import { renewLocation } from './public-api.js'; +// 解决微信小程序 +var QQMapWX = require('./map/qqmap-wx-jssdk.min.js'); +var qqmapsdk = new QQMapWX({ + key: 'QNHBZ-55RKF-OMFJJ-NPU7O-EPSDH-ACBAA' +}); +// 解决H5跨域 +const jsonp = function(url, data) { + return new Promise((resolve, reject) => { + // 1.初始化url + let dataString = url.indexOf('?') === -1 ? '?' : '&' + let callbackName = `jsonpCB_${ Date.now() }`; + url += `${ dataString }callback=${ callbackName }` + if(data) { + // 2.有请求参数,依次添加到url + for(let k in data) { + url += `&${ k }=${ data[k] }` + } + } + let scriptNode = document.createElement('script'); + scriptNode.src = url; + // 3. callback + window[callbackName] = (result) => { + result ? resolve(result) : reject('没有返回数据'); + delete window[callbackName]; + document.body.removeChild(scriptNode); + } + // 4. 异常情况 + scriptNode.addEventListener('error', () => { + reject('接口返回数据失败'); + delete window[callbackName]; + document.body.removeChild(scriptNode); + }, false) + // 5. 开始请求 + document.body.appendChild(scriptNode) + }) +} const tools = { + // 更新用户地理位置 + locationTimer:null, + // 每十分钟调用一次 + renewLocationEv(){ + this.platformEv(); + clearInterval(this.locationTimer); + this.locationTimer = setInterval(()=>{ + this.platformEv(); + },600000) + }, + // 平台判断 + platformEv(){ + // #ifdef APP-PLUS + this.getAddress(); + // #endif + // #ifdef MP-WEIXIN + this.getAddressWx(); + // #endif + // #ifdef H5 + this.getAddressH5(); + // #endif + }, + // app获取经纬度和详细地址 + getAddress(){ + uni.getLocation({ + type: 'gcj02', + geocode:true, + success: (res)=> { + // console.log(res,'地址信息'); + let params = { + latitude:res.latitude, + longitude:res.longitude, + address:`${res.address.province}${res.address.city}${res.address.district || ''}${res.address.street || ''}${res.address.streetNum || ''}${res.address.poiName || ''}` + } + console.log(params,'APP'); + this.renewAddressApi(params); + } + }); + }, + // 微信获取经纬度和详细地址 + getAddressWx(){ + uni.getLocation({ + type: 'gcj02', + geocode:true, + success: (res)=> { + // console.log(res,'地址信息'); + qqmapsdk.reverseGeocoder({ + location: {latitude: res.latitude, longitude: res.longitude}, + success:(res)=> { + // console.log(res,'WX'); + let params = { + latitude:res.result.location.lat, + longitude:res.result.location.lng, + address:`${res.result.address}` + } + console.log(params,'WX'); + this.renewAddressApi(params); + }, + fail(err) { + console.log(err) + } + }) + } + }); + }, + // h5 + getAddressH5(){ + uni.getLocation({ + type: 'wgs84', + success: (res)=> { + uni.showLoading({ + title: '加载中', + mask:true + }); + let str = `output=jsonp&key=QNHBZ-55RKF-OMFJJ-NPU7O-EPSDH-ACBAA&location=${res.latitude},${res.longitude}` + jsonp('https://apis.map.qq.com/ws/geocoder/v1/?'+str,{}).then(res=>{ + // console.log(res,'H5'); + uni.hideLoading(); + if(res.status == 0){ + // that.locationName = res.result.address; //当前定位 + let params = { + latitude:res.result.location.lat, + longitude:res.result.location.lng, + address:`${res.result.address}` + } + console.log(params,'H5'); + this.renewAddressApi(params); + } + }) + } + }); + }, + // 更新地址事件 + renewAddressApi(params){ + console.log(params,'最终提交参数'); + // renewLocation(params).then(res=>{}) + }, + // 刷新token + refreshToken(){ + console.log('进入检测token是否过期'); + var date = new Date(); + var timestamp = date.getTime();//精确到毫秒 + // 如果过期时间 减 10分钟 小于当前时间,刷新token + if((uni.getStorageSync('expire')*1000 - 600000) < timestamp) { + uni.login({ + provider: 'weixin', + success: (res)=> { + if (res.code) { + var params = {code:res.code} + uni.request({ + url: `${app.globalData.hostapi}/api/user/login`, + method: 'post', + data: params, + header: { + 'Content-Type': 'application/json; charset=UTF-8', + 'Authorization': 'Bearer '+uni.getStorageSync('token') || '' + }, + success: res => { + if(res.data.data.token!=''){ + uni.setStorageSync('token',res.data.data.token)//缓存token + uni.setStorageSync('openid',res.data.data.openid)//缓存Openid + uni.setStorageSync('expire',res.data.data.expire)//缓存失效时间(时间戳格式) + uni.setStorageSync('is_active',res.data.data.is_active)//是否第一次授权 + uni.setStorageSync('phone_active',res.data.data.phone_active)//是否绑定手机号 + uni.setStorageSync('userId',res.data.data.account_id)//用户id + uni.setStorageSync('invite_code',res.data.data.invite_code)//邀请码 + } + } + }) + } + }, + }); + } + }, + // 判断是否授权,没授权,前往登录页面授权 + authTimer:null, + judgeAuth(){ + let auth = false; + clearTimeout(this.authTimer); + if(!uni.getStorageSync('token')) { + this.showToast('请登录'); + this.authTimer = setTimeout(()=>{ + uni.navigateTo({url:'/pages/login/login'}); + },2000) + } else { + auth = true; + } + return auth; + }, + // 判断当前环境、清空日志、设置全局域名 + currentContext(){ + // #ifdef APP-PLUS + if(uni.getSystemInfoSync().platform != "devtools"){//devtools:开发版 值域为:ios、android、mac(3.1.10+)、windows(3.1.10+)、linux(3.1.10+) + // console.log = () =>{} + } + // #endif + // 微信小程序原生API性能优化 + // #ifdef MP-WEIXIN + let hInfo = wx.getAccountInfoSync(); + // console.log(hInfo.envVersion);//develop:开发版 trial:体验版 release:正式版 + // if(hInfo.miniProgram.envVersion == "develop"){ + if(hInfo.miniProgram.envVersion == "develop" || hInfo.miniProgram.envVersion == "trial"){ + + } else { + // 清除所有输出日志 + console.log = () =>{}; + // 开启埋点倒计时 + this.daoTime();//开启埋点倒计时 + } + // #endif + }, timer:'', timerNot:'', // 埋点倒计时 @@ -501,80 +709,6 @@ const tools = { } return newTime; }, - // 刷新token - refreshToken(){ - console.log('进入检测token是否过期'); - var date = new Date(); - var timestamp = date.getTime();//精确到毫秒 - // 如果过期时间 减 10分钟 小于当前时间,刷新token - if((uni.getStorageSync('expire')*1000 - 600000) < timestamp) { - uni.login({ - provider: 'weixin', - success: (res)=> { - if (res.code) { - var params = {code:res.code} - uni.request({ - url: `${app.globalData.hostapi}/api/user/login`, - method: 'post', - data: params, - header: { - 'Content-Type': 'application/json; charset=UTF-8', - 'Authorization': 'Bearer '+uni.getStorageSync('token') || '' - }, - success: res => { - if(res.data.data.token!=''){ - uni.setStorageSync('token',res.data.data.token)//缓存token - uni.setStorageSync('openid',res.data.data.openid)//缓存Openid - uni.setStorageSync('expire',res.data.data.expire)//缓存失效时间(时间戳格式) - uni.setStorageSync('is_active',res.data.data.is_active)//是否第一次授权 - uni.setStorageSync('phone_active',res.data.data.phone_active)//是否绑定手机号 - uni.setStorageSync('userId',res.data.data.account_id)//用户id - uni.setStorageSync('invite_code',res.data.data.invite_code)//邀请码 - } - } - }) - } - }, - }); - } - }, - // 判断是否授权,没授权,前往登录页面授权 - authTimer:null, - judgeAuth(){ - let auth = false; - clearTimeout(this.authTimer); - if(!uni.getStorageSync('token')) { - this.showToast('请登录'); - this.authTimer = setTimeout(()=>{ - uni.navigateTo({url:'/pages/login/login'}); - },2000) - } else { - auth = true; - } - return auth; - }, - // 判断当前环境、清空日志、设置全局域名 - currentContext(){ - // #ifdef APP-PLUS - if(uni.getSystemInfoSync().platform != "devtools"){//devtools:开发版 值域为:ios、android、mac(3.1.10+)、windows(3.1.10+)、linux(3.1.10+) - // console.log = () =>{} - } - // #endif - // 微信小程序原生API性能优化 - // #ifdef MP-WEIXIN - let hInfo = wx.getAccountInfoSync(); - // console.log(hInfo.envVersion);//develop:开发版 trial:体验版 release:正式版 - // if(hInfo.miniProgram.envVersion == "develop"){ - if(hInfo.miniProgram.envVersion == "develop" || hInfo.miniProgram.envVersion == "trial"){ - - } else { - // 清除所有输出日志 - console.log = () =>{}; - // 开启埋点倒计时 - this.daoTime();//开启埋点倒计时 - } - // #endif - }, // 禁止小程序使用分享 disableShareEv(){ // #ifdef MP-WEIXIN diff --git a/manifest.json b/manifest.json index 4839c28..8db9743 100644 --- a/manifest.json +++ b/manifest.json @@ -39,7 +39,11 @@ "" ] }, - "ios" : {}, + "ios" : { + "privacyDescription" : { + "NSLocationWhenInUseUsageDescription" : "" + } + }, /* ios打包配置 */ "sdkConfigs" : { "maps" : { @@ -57,6 +61,9 @@ }, "push" : {}, "geolocation" : { + "system" : { + "__platform__" : [ "ios", "android" ] + }, "baidu" : { "__platform__" : [ "ios", "android" ], "appkey_ios" : "", @@ -103,12 +110,14 @@ "sdkConfigs" : { "maps" : { "qqmap" : { - "key" : "TMWBZ-XA3CD-HA74Y-PNUS4-SAV6Q-X7FXH" + "key" : "QNHBZ-55RKF-OMFJJ-NPU7O-EPSDH-ACBAA" } } }, "devServer" : { "https" : false, + "port" : 8080, + "disableHostCheck" : true, "proxy" : { "/web" : { "target" : "https://7and5.cn", diff --git a/pages/appreciationServe/appreciationServe.vue b/pages/appreciationServe/appreciationServe.vue index 6b02a6c..744f59b 100644 --- a/pages/appreciationServe/appreciationServe.vue +++ b/pages/appreciationServe/appreciationServe.vue @@ -31,11 +31,18 @@ - + *产品尺寸 - - + + + 宽: + + x + + 高: + + 补充信息 @@ -67,16 +74,16 @@