export function formatValueByGapRule(gapRule, value, gap = ' ', range, isAdd = 1) { const arr = value ? value.split('') : []; let showValue = ''; const rule = []; gapRule.split('|').some((n, j) => { rule[j] = +n + (rule[j - 1] ? +rule[j - 1] : 0); }); let j = 0; arr.some((n, i) => { // Remove the excess part if (i > rule[rule.length - 1] - 1) { return; } if (i > 0 && i === rule[j]) { showValue = showValue + gap + n; j++; } else { showValue = showValue + '' + n; } }); let adapt = 0; rule.some((n, j) => { if (range === +n + 1 + j) { adapt = 1 * isAdd; } }); range = typeof range !== 'undefined' ? (range === 0 ? 0 : range + adapt) : showValue.length; return { value: showValue, range: range }; } export function formatValueByGapStep(step, value, gap = ' ', direction = 'right', range, isAdd = 1, oldValue = '') { if (value.length === 0) { return { value, range }; } const arr = value && value.split(''); let _range = range; let showValue = ''; if (direction === 'right') { for (let j = arr.length - 1, k = 0; j >= 0; j--, k++) { const m = arr[j]; showValue = k > 0 && k % step === 0 ? m + gap + showValue : m + '' + showValue; } if (isAdd === 1) { // 在添加的情况下,如果添加前字符串的长度减去新的字符串的长度为2,说明多了一个间隔符,需要调整range if (oldValue.length - showValue.length === -2) { _range = range + 1; } } else { // 在删除情况下,如果删除前字符串的长度减去新的字符串的长度为2,说明少了一个间隔符,需要调整range if (oldValue.length - showValue.length === 2) { _range = range - 1; } // 删除到最开始,range 保持 0 if (_range <= 0) { _range = 0; } } } else { arr.some((n, i) => { showValue = i > 0 && i % step === 0 ? showValue + gap + n : showValue + '' + n; }); const adapt = range % (step + 1) === 0 ? 1 * isAdd : 0; _range = typeof range !== 'undefined' ? (range === 0 ? 0 : range + adapt) : showValue.length; } return { value: showValue, range: _range }; } export function trimValue(value, gap = ' ') { value = typeof value === 'undefined' ? '' : value; const reg = new RegExp(gap, 'g'); value = value.toString().replace(reg, ''); return value; } function getAddress(geo) { const { regeocode = {} } = geo || {}; const { addressComponent = {} } = regeocode || {}; const { province, city, district, township, streetNumber } = addressComponent || {}; const { street, number } = streetNumber || {}; const formattedAddress = regeocode.formatted_address || regeocode.formattedAddress || ''; let amapAddress = formattedAddress.replace(province, ''); amapAddress = amapAddress.replace(city, ''); amapAddress = amapAddress.replace(district, ''); amapAddress = amapAddress.replace(township, ''); amapAddress = amapAddress.replace(street, ''); amapAddress = amapAddress.replace(number, ''); return { formattedAddress, fullAddress: `${province}${city}${district}${township}${street}${number}`, address: `${township}${street}${number}${amapAddress}`, amapAddress, adcode: addressComponent.adcode, township, }; } export function formatLngLat({ lat, lng }) { if (!lat || !lng) { return Promise.resolve({}); } return new Promise(resolve => { uni.request({ url: 'https://restapi.amap.com/v3/geocode/regeo', //逆地理编码接口地址。 data: { key: '1b987a62e5685a58cda5933e1bc66044', location: lng + ',' + lat, }, success: response => { const regeocode = response?.data?.regeocode || {}; const addressComponent = regeocode?.addressComponent || {}; const addressInfo = getAddress(response?.data); let location = { lng: lng || '', lat: lat || '', provinceCode: addressComponent.adcode ? addressComponent.adcode.substring(0, 2) + '0000' : '', cityCode: addressComponent.adcode ? addressComponent.adcode.substring(0, 4) + '00' : '', areaCode: addressComponent.adcode, provinceName: addressComponent.province, areaName: addressComponent.district + '', address: addressInfo.address, formattedAddress: addressInfo.formattedAddress, }; resolve(location); }, fail() { resolve({}); }, }); }); }