@bytenew/bn-applet-ui 1.1.35 → 1.1.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common.scss +2 -2
- package/dist/bn-applet-ui.common.js +434 -252
- package/dist/bn-applet-ui.common.js.map +1 -1
- package/dist/bn-applet-ui.umd.js +434 -252
- package/dist/bn-applet-ui.umd.js.map +1 -1
- package/dist/bn-applet-ui.umd.min.js +2 -2
- package/dist/bn-applet-ui.umd.min.js.map +1 -1
- package/package.json +1 -1
package/dist/bn-applet-ui.umd.js
CHANGED
|
@@ -21574,6 +21574,15 @@ var es_array_sort = __webpack_require__(6910);
|
|
|
21574
21574
|
|
|
21575
21575
|
|
|
21576
21576
|
|
|
21577
|
+
|
|
21578
|
+
|
|
21579
|
+
|
|
21580
|
+
|
|
21581
|
+
|
|
21582
|
+
|
|
21583
|
+
|
|
21584
|
+
|
|
21585
|
+
|
|
21577
21586
|
|
|
21578
21587
|
|
|
21579
21588
|
|
|
@@ -21663,24 +21672,34 @@ function parseAddressDetail(address, sourceData) {
|
|
|
21663
21672
|
phone: '',
|
|
21664
21673
|
extensionNumber: '' // 淘宝分机号码
|
|
21665
21674
|
};
|
|
21675
|
+
|
|
21676
|
+
// 第一步:预处理
|
|
21666
21677
|
address = joinAddressLines(address);
|
|
21667
21678
|
var presetName = address.name;
|
|
21668
21679
|
address = stripAddressLabels(address.text);
|
|
21680
|
+
|
|
21681
|
+
// 清理特殊字符(包括句号)
|
|
21669
21682
|
var search = ['详细地址', '收货地址', '联系地址', '收件地址', '邮政编码', '手机号码', '联系电话', '联系方式', '收货人', '收件人', '联系人', '姓名', '名字', '手机号', '邮编', '收货', '地址', '详细', '电话', '固话', ':', ':', ';', ';', ',', ',', '。'];
|
|
21670
21683
|
search.forEach(function (str) {
|
|
21671
21684
|
address = address.replace(new RegExp(str, 'g'), ' ');
|
|
21672
21685
|
});
|
|
21686
|
+
|
|
21687
|
+
// 替换多个空格为单个空格
|
|
21673
21688
|
address = address.replace(/ {2,}/g, ' ');
|
|
21689
|
+
|
|
21690
|
+
// 处理电话号码格式
|
|
21674
21691
|
address = address.replace(/(\d{3})-(\d{4})-(\d{4})/g, '$1$2$3');
|
|
21675
21692
|
address = address.replace(/(\d{3}) (\d{4}) (\d{4})/g, '$1$2$3');
|
|
21676
21693
|
|
|
21677
|
-
//
|
|
21694
|
+
// 提取手机号
|
|
21678
21695
|
var mobileReg = /([1][0-9]{10}((-[0-9]{4})?))|((86-?)?[1][0-9]{10})/g;
|
|
21679
21696
|
var mobile = mobileReg.exec(address);
|
|
21680
21697
|
if (mobile) {
|
|
21681
21698
|
parse.mobile = mobile[0];
|
|
21682
21699
|
address = address.replace(mobile[0], ' ');
|
|
21683
21700
|
}
|
|
21701
|
+
|
|
21702
|
+
// 提取固话
|
|
21684
21703
|
var phoneReg = /(([0-9]{3,4}-)[0-9]{7,8})|([0-9]{12})|([0-9]{11})|([0-9]{10})|([0-9]{9})|([0-9]{8})|([0-9]{7})/g;
|
|
21685
21704
|
var phone = phoneReg.exec(address);
|
|
21686
21705
|
if (phone) {
|
|
@@ -21699,71 +21718,67 @@ function parseAddressDetail(address, sourceData) {
|
|
|
21699
21718
|
parse.phone = phone[0];
|
|
21700
21719
|
address = address.replace(phone[0], ' ');
|
|
21701
21720
|
}
|
|
21721
|
+
|
|
21722
|
+
// 提取邮编
|
|
21702
21723
|
var zipReg = /([0-9]{6})/g;
|
|
21703
21724
|
var zip = zipReg.exec(address);
|
|
21704
21725
|
if (zip) {
|
|
21705
21726
|
parse.zip_code = zip[0];
|
|
21706
21727
|
address = address.replace(zip[0], '');
|
|
21707
21728
|
}
|
|
21708
|
-
|
|
21709
|
-
|
|
21729
|
+
|
|
21730
|
+
// 清理多余空格
|
|
21731
|
+
address = address.replace(/ {2,}/g, ' ').trim();
|
|
21732
|
+
|
|
21733
|
+
// ============== 核心解析 ==============
|
|
21734
|
+
var detail = detail_parse_forward(address, sourceData);
|
|
21735
|
+
console.log('正向解析结果:', JSON.stringify(detail));
|
|
21710
21736
|
if (!detail.city) {
|
|
21711
|
-
detail = detail_parse(address
|
|
21737
|
+
detail = detail_parse(address);
|
|
21738
|
+
console.log('逆向解析结果:', JSON.stringify(detail));
|
|
21712
21739
|
if (detail.area && !detail.city) {
|
|
21713
|
-
detail = detail_parse(address
|
|
21740
|
+
detail = detail_parse(address, {
|
|
21714
21741
|
ignoreArea: true
|
|
21715
21742
|
});
|
|
21716
|
-
|
|
21717
|
-
} else {
|
|
21718
|
-
// console.log('smart_parse');
|
|
21743
|
+
console.log('ignoreArea解析结果:', JSON.stringify(detail));
|
|
21719
21744
|
}
|
|
21720
|
-
|
|
21721
|
-
|
|
21722
|
-
|
|
21745
|
+
}
|
|
21746
|
+
|
|
21747
|
+
// 提取收件人姓名
|
|
21748
|
+
if (detail.name) {
|
|
21749
|
+
parse.name = detail.name;
|
|
21750
|
+
} else {
|
|
21751
|
+
// 从地址中提取可能的姓名
|
|
21752
|
+
var addrParts = address.replace(detail.province || '', '').replace(detail.city || '', '').replace(detail.area || '', '').split(' ').filter(function (str) {
|
|
21753
|
+
return str.trim();
|
|
21723
21754
|
});
|
|
21724
|
-
if (
|
|
21725
|
-
|
|
21755
|
+
if (addrParts.length > 1) {
|
|
21756
|
+
addrParts.forEach(function (str) {
|
|
21726
21757
|
if (!parse.name || str && str.length < parse.name.length) {
|
|
21727
21758
|
parse.name = str.trim();
|
|
21728
21759
|
}
|
|
21729
21760
|
});
|
|
21730
21761
|
if (parse.name) {
|
|
21731
|
-
detail.addr = detail.addr.replace(parse.name, '').trim();
|
|
21732
|
-
}
|
|
21733
|
-
}
|
|
21734
|
-
} else {
|
|
21735
|
-
if (detail.name) {
|
|
21736
|
-
parse.name = detail.name;
|
|
21737
|
-
} else {
|
|
21738
|
-
var _list = detail.addr.split(' ').filter(function (str) {
|
|
21739
|
-
return str;
|
|
21740
|
-
});
|
|
21741
|
-
if (_list.length > 1) {
|
|
21742
|
-
parse.name = _list[_list.length - 1];
|
|
21743
|
-
}
|
|
21744
|
-
//详细地址中去掉 姓名
|
|
21745
|
-
if (parse.name) {
|
|
21746
|
-
detail.addr = detail.addr.replace(parse.name, '').trim();
|
|
21762
|
+
detail.addr = (detail.addr || '').replace(parse.name, '').trim();
|
|
21747
21763
|
}
|
|
21748
21764
|
}
|
|
21749
|
-
|
|
21750
|
-
//将分机号自动粘贴在收件人姓名后
|
|
21751
|
-
if (parse.extensionNumber) {
|
|
21752
|
-
parse.name = parse.name + '[转' + parse.extensionNumber + ']';
|
|
21753
|
-
}
|
|
21754
21765
|
}
|
|
21755
|
-
parse.
|
|
21756
|
-
|
|
21757
|
-
|
|
21758
|
-
parse.
|
|
21759
|
-
parse.
|
|
21760
|
-
parse.
|
|
21766
|
+
if (parse.extensionNumber) {
|
|
21767
|
+
parse.name = parse.name + '[转' + parse.extensionNumber + ']';
|
|
21768
|
+
}
|
|
21769
|
+
parse.province = detail.province || '';
|
|
21770
|
+
parse.city = detail.city || '';
|
|
21771
|
+
parse.area = detail.area || '';
|
|
21772
|
+
parse.street = detail.street || '';
|
|
21773
|
+
parse.addr = detail.addr || '';
|
|
21761
21774
|
if (presetName) {
|
|
21762
21775
|
parse.name = presetName;
|
|
21763
21776
|
if (parse.addr) {
|
|
21764
21777
|
parse.addr = parse.addr.replace(presetName, '').trim();
|
|
21765
21778
|
}
|
|
21766
21779
|
}
|
|
21780
|
+
|
|
21781
|
+
// 省份标准化
|
|
21767
21782
|
if (parse.province === "澳门" || parse.province === "香港") {
|
|
21768
21783
|
parse.province += "特别行政区";
|
|
21769
21784
|
} else if (parse.province === "新疆") {
|
|
@@ -21776,14 +21791,8 @@ function parseAddressDetail(address, sourceData) {
|
|
|
21776
21791
|
parse.province = "宁夏回族自治区";
|
|
21777
21792
|
} else if (parse.province === "内蒙古") {
|
|
21778
21793
|
parse.province = "内蒙古自治区";
|
|
21779
|
-
} else {
|
|
21780
|
-
if ("北京市上海市天津市重庆市".indexOf(parse.province) === -1) {
|
|
21781
|
-
// parse.province += "省";
|
|
21782
|
-
}
|
|
21783
|
-
}
|
|
21784
|
-
if (parse.city.indexOf("市") === -1) {
|
|
21785
|
-
// parse.city += "市";
|
|
21786
21794
|
}
|
|
21795
|
+
console.log('最终解析结果:', JSON.stringify(parse));
|
|
21787
21796
|
return parse;
|
|
21788
21797
|
}
|
|
21789
21798
|
|
|
@@ -21792,6 +21801,7 @@ function parseAddressDetail(address, sourceData) {
|
|
|
21792
21801
|
* 从前到后按 province city addr 逐级筛选
|
|
21793
21802
|
* 有city的值即可说明解析成功
|
|
21794
21803
|
* 此模式对地址顺序有要求
|
|
21804
|
+
* 正向解析:省 -> area -> 反推城市
|
|
21795
21805
|
* @param address
|
|
21796
21806
|
* @returns {{province: string, city: string, area: string, addr: string}}
|
|
21797
21807
|
*/
|
|
@@ -21801,92 +21811,330 @@ function detail_parse_forward(address, sourceData) {
|
|
|
21801
21811
|
city: '',
|
|
21802
21812
|
area: '',
|
|
21803
21813
|
street: '',
|
|
21804
|
-
addr:
|
|
21814
|
+
addr: address,
|
|
21805
21815
|
name: ''
|
|
21806
21816
|
};
|
|
21807
|
-
|
|
21808
|
-
|
|
21809
|
-
|
|
21810
|
-
|
|
21811
|
-
|
|
21812
|
-
|
|
21813
|
-
|
|
21814
|
-
|
|
21815
|
-
|
|
21816
|
-
|
|
21817
|
-
|
|
21818
|
-
|
|
21819
|
-
|
|
21820
|
-
|
|
21821
|
-
|
|
21822
|
-
|
|
21823
|
-
|
|
21824
|
-
|
|
21825
|
-
|
|
21826
|
-
|
|
21827
|
-
|
|
21828
|
-
|
|
21829
|
-
|
|
21817
|
+
if (!address || address.length === 0) {
|
|
21818
|
+
return parse;
|
|
21819
|
+
}
|
|
21820
|
+
|
|
21821
|
+
// ===== 关键修复:检查 defaultData 是否已初始化 =====
|
|
21822
|
+
if (!defaultData || defaultData.length === 0) {
|
|
21823
|
+
console.log('defaultData为空,请先调用parseArea初始化');
|
|
21824
|
+
// 尝试使用 mArea 进行匹配
|
|
21825
|
+
return parse;
|
|
21826
|
+
}
|
|
21827
|
+
var remaining = address;
|
|
21828
|
+
|
|
21829
|
+
// ========== 第一步:匹配省份 ==========
|
|
21830
|
+
var matchedProvince = null;
|
|
21831
|
+
|
|
21832
|
+
// 先检查地址是否以省份名开头
|
|
21833
|
+
var provPatterns = [{
|
|
21834
|
+
pattern: '广东省',
|
|
21835
|
+
province: '广东省'
|
|
21836
|
+
}, {
|
|
21837
|
+
pattern: '广东',
|
|
21838
|
+
province: '广东省'
|
|
21839
|
+
}, {
|
|
21840
|
+
pattern: '北京市',
|
|
21841
|
+
province: '北京市'
|
|
21842
|
+
}, {
|
|
21843
|
+
pattern: '北京',
|
|
21844
|
+
province: '北京市'
|
|
21845
|
+
}, {
|
|
21846
|
+
pattern: '天津市',
|
|
21847
|
+
province: '天津市'
|
|
21848
|
+
}, {
|
|
21849
|
+
pattern: '天津',
|
|
21850
|
+
province: '天津市'
|
|
21851
|
+
}, {
|
|
21852
|
+
pattern: '上海市',
|
|
21853
|
+
province: '上海市'
|
|
21854
|
+
}, {
|
|
21855
|
+
pattern: '上海',
|
|
21856
|
+
province: '上海市'
|
|
21857
|
+
}, {
|
|
21858
|
+
pattern: '重庆市',
|
|
21859
|
+
province: '重庆市'
|
|
21860
|
+
}, {
|
|
21861
|
+
pattern: '重庆',
|
|
21862
|
+
province: '重庆市'
|
|
21863
|
+
}];
|
|
21864
|
+
|
|
21865
|
+
// 先尝试快速匹配
|
|
21866
|
+
var _loop = function _loop() {
|
|
21867
|
+
var pattern = _provPatterns[_i];
|
|
21868
|
+
if (remaining.startsWith(pattern.pattern)) {
|
|
21869
|
+
// 在 defaultData 中找到对应的省份数据
|
|
21870
|
+
var found = defaultData.find(function (p) {
|
|
21871
|
+
return p.name === pattern.province;
|
|
21872
|
+
});
|
|
21873
|
+
if (found) {
|
|
21874
|
+
matchedProvince = found;
|
|
21875
|
+
parse.province = pattern.province;
|
|
21876
|
+
remaining = remaining.substring(pattern.pattern.length);
|
|
21877
|
+
if (remaining.startsWith('省') && pattern.pattern !== pattern.province) {
|
|
21878
|
+
remaining = remaining.substring(1);
|
|
21830
21879
|
}
|
|
21880
|
+
console.log('快速匹配到省份:', pattern.province);
|
|
21881
|
+
return 1; // break
|
|
21882
|
+
}
|
|
21883
|
+
}
|
|
21884
|
+
};
|
|
21885
|
+
for (var _i = 0, _provPatterns = provPatterns; _i < _provPatterns.length; _i++) {
|
|
21886
|
+
if (_loop()) break;
|
|
21887
|
+
}
|
|
21888
|
+
|
|
21889
|
+
// 如果快速匹配失败,遍历 defaultData
|
|
21890
|
+
if (!matchedProvince) {
|
|
21891
|
+
for (var i = 0; i < defaultData.length; i++) {
|
|
21892
|
+
var province = defaultData[i];
|
|
21893
|
+
var provName = province.name;
|
|
21894
|
+
|
|
21895
|
+
// 查找省份名
|
|
21896
|
+
var idx = remaining.indexOf(provName);
|
|
21897
|
+
if (idx > -1 && idx < 5) {
|
|
21898
|
+
if (idx > 0) {
|
|
21899
|
+
parse.name = remaining.substring(0, idx).trim();
|
|
21900
|
+
}
|
|
21901
|
+
matchedProvince = province;
|
|
21902
|
+
parse.province = provName;
|
|
21903
|
+
remaining = remaining.substring(idx + provName.length);
|
|
21904
|
+
console.log('遍历匹配到省份(全名):', provName, '剩余:', remaining);
|
|
21905
|
+
break;
|
|
21831
21906
|
}
|
|
21832
|
-
|
|
21833
|
-
|
|
21834
|
-
|
|
21835
|
-
|
|
21836
|
-
|
|
21837
|
-
|
|
21838
|
-
|
|
21839
|
-
|
|
21907
|
+
|
|
21908
|
+
// 查找简称
|
|
21909
|
+
var provShort = provName.replace('省', '').replace('市', '');
|
|
21910
|
+
if (provShort !== provName && provShort.length >= 2) {
|
|
21911
|
+
idx = remaining.indexOf(provShort);
|
|
21912
|
+
if (idx > -1 && idx < 5) {
|
|
21913
|
+
if (idx > 0) {
|
|
21914
|
+
parse.name = remaining.substring(0, idx).trim();
|
|
21915
|
+
}
|
|
21916
|
+
matchedProvince = province;
|
|
21917
|
+
parse.province = provName;
|
|
21918
|
+
remaining = remaining.substring(idx + provShort.length);
|
|
21919
|
+
if (remaining.startsWith('省')) {
|
|
21920
|
+
remaining = remaining.substring(1);
|
|
21840
21921
|
}
|
|
21922
|
+
console.log('遍历匹配到省份(简称):', provName, '剩余:', remaining);
|
|
21923
|
+
break;
|
|
21841
21924
|
}
|
|
21842
|
-
|
|
21843
|
-
|
|
21844
|
-
|
|
21845
|
-
|
|
21846
|
-
|
|
21847
|
-
|
|
21925
|
+
}
|
|
21926
|
+
}
|
|
21927
|
+
}
|
|
21928
|
+
if (!matchedProvince) {
|
|
21929
|
+
console.log('未匹配到省份,defaultData前3个:', defaultData.slice(0, 3).map(function (p) {
|
|
21930
|
+
return p.name;
|
|
21931
|
+
}));
|
|
21932
|
+
// 尝试通过 mArea 反查
|
|
21933
|
+
var reverseResult = findProvinceByArea(remaining);
|
|
21934
|
+
if (reverseResult) {
|
|
21935
|
+
parse.province = reverseResult.province;
|
|
21936
|
+
parse.city = reverseResult.city;
|
|
21937
|
+
parse.area = reverseResult.area;
|
|
21938
|
+
parse.addr = reverseResult.addr || remaining;
|
|
21939
|
+
return parse;
|
|
21940
|
+
}
|
|
21941
|
+
return parse;
|
|
21942
|
+
}
|
|
21943
|
+
|
|
21944
|
+
// ========== 第二步:在省份内查找 area,反推城市 ==========
|
|
21945
|
+
if (matchedProvince.city && matchedProvince.city.length > 0) {
|
|
21946
|
+
// 收集所有 area
|
|
21947
|
+
var allAreas = [];
|
|
21948
|
+
var _iterator = _createForOfIteratorHelper(matchedProvince.city),
|
|
21949
|
+
_step;
|
|
21950
|
+
try {
|
|
21951
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
21952
|
+
var city = _step.value;
|
|
21953
|
+
if (city.area && city.area.length > 0) {
|
|
21954
|
+
var _iterator4 = _createForOfIteratorHelper(city.area),
|
|
21955
|
+
_step4;
|
|
21956
|
+
try {
|
|
21957
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
21958
|
+
var areaName = _step4.value;
|
|
21959
|
+
if (areaName && areaName !== '其他' && areaName !== '其它区' && areaName !== '其他区' && areaName.length >= 2) {
|
|
21960
|
+
allAreas.push({
|
|
21961
|
+
areaName: areaName,
|
|
21962
|
+
cityName: city.name,
|
|
21963
|
+
cityData: city
|
|
21964
|
+
});
|
|
21965
|
+
}
|
|
21848
21966
|
}
|
|
21967
|
+
} catch (err) {
|
|
21968
|
+
_iterator4.e(err);
|
|
21969
|
+
} finally {
|
|
21970
|
+
_iterator4.f();
|
|
21849
21971
|
}
|
|
21850
|
-
|
|
21851
|
-
|
|
21852
|
-
|
|
21972
|
+
}
|
|
21973
|
+
}
|
|
21974
|
+
|
|
21975
|
+
// 按长度降序
|
|
21976
|
+
} catch (err) {
|
|
21977
|
+
_iterator.e(err);
|
|
21978
|
+
} finally {
|
|
21979
|
+
_iterator.f();
|
|
21980
|
+
}
|
|
21981
|
+
allAreas.sort(function (a, b) {
|
|
21982
|
+
return b.areaName.length - a.areaName.length;
|
|
21983
|
+
});
|
|
21984
|
+
|
|
21985
|
+
// 查找匹配的 area
|
|
21986
|
+
for (var _i2 = 0, _allAreas = allAreas; _i2 < _allAreas.length; _i2++) {
|
|
21987
|
+
var areaItem = _allAreas[_i2];
|
|
21988
|
+
var _idx = remaining.indexOf(areaItem.areaName);
|
|
21989
|
+
if (_idx > -1 && _idx < 10) {
|
|
21990
|
+
parse.city = areaItem.cityName;
|
|
21991
|
+
parse.area = areaItem.areaName;
|
|
21992
|
+
var afterArea = remaining.substring(_idx + areaItem.areaName.length);
|
|
21993
|
+
console.log('匹配到area:', areaItem.areaName, '城市:', areaItem.cityName);
|
|
21994
|
+
|
|
21995
|
+
// 尝试匹配街道
|
|
21996
|
+
if (areaItem.cityData.street && areaItem.cityData.street[areaItem.areaName]) {
|
|
21997
|
+
var streets = areaItem.cityData.street[areaItem.areaName];
|
|
21998
|
+
if (streets && streets.length > 0) {
|
|
21999
|
+
var sortedStreets = streets.filter(function (s) {
|
|
22000
|
+
return s && s !== '其他' && s !== '其它区' && s !== '其他区' && s.length >= 2;
|
|
22001
|
+
}).sort(function (a, b) {
|
|
21853
22002
|
return b.length - a.length;
|
|
21854
22003
|
});
|
|
21855
|
-
|
|
21856
|
-
|
|
21857
|
-
|
|
21858
|
-
|
|
21859
|
-
|
|
21860
|
-
|
|
21861
|
-
|
|
21862
|
-
|
|
21863
|
-
|
|
21864
|
-
|
|
21865
|
-
|
|
21866
|
-
|
|
21867
|
-
|
|
21868
|
-
|
|
22004
|
+
console.log('该area下的街道:', sortedStreets.slice(0, 5));
|
|
22005
|
+
var _iterator2 = _createForOfIteratorHelper(sortedStreets),
|
|
22006
|
+
_step2;
|
|
22007
|
+
try {
|
|
22008
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
22009
|
+
var streetName = _step2.value;
|
|
22010
|
+
// 完整匹配
|
|
22011
|
+
var streetIdx = afterArea.indexOf(streetName);
|
|
22012
|
+
if (streetIdx > -1 && streetIdx < 8) {
|
|
22013
|
+
parse.street = streetName;
|
|
22014
|
+
afterArea = afterArea.substring(streetIdx + streetName.length);
|
|
22015
|
+
console.log('匹配到街道(完整):', streetName);
|
|
22016
|
+
break;
|
|
22017
|
+
}
|
|
22018
|
+
|
|
22019
|
+
// 模糊匹配:去掉后缀
|
|
22020
|
+
var streetShort = streetName.replace('街道', '').replace('镇', '').replace('乡', '');
|
|
22021
|
+
if (streetShort !== streetName && streetShort.length >= 2) {
|
|
22022
|
+
streetIdx = afterArea.indexOf(streetShort);
|
|
22023
|
+
if (streetIdx > -1 && streetIdx < 8) {
|
|
22024
|
+
parse.street = streetName;
|
|
22025
|
+
afterArea = afterArea.substring(streetIdx + streetShort.length);
|
|
22026
|
+
if (afterArea.startsWith('区')) {
|
|
22027
|
+
afterArea = afterArea.substring(1);
|
|
21869
22028
|
}
|
|
22029
|
+
console.log('匹配到街道(模糊):', streetShort, '->', streetName);
|
|
22030
|
+
break;
|
|
21870
22031
|
}
|
|
21871
22032
|
}
|
|
21872
|
-
break;
|
|
21873
22033
|
}
|
|
22034
|
+
} catch (err) {
|
|
22035
|
+
_iterator2.e(err);
|
|
22036
|
+
} finally {
|
|
22037
|
+
_iterator2.f();
|
|
21874
22038
|
}
|
|
21875
22039
|
}
|
|
21876
|
-
break;
|
|
21877
22040
|
}
|
|
22041
|
+
parse.addr = afterArea.trim();
|
|
22042
|
+
return parse;
|
|
21878
22043
|
}
|
|
21879
|
-
|
|
21880
|
-
|
|
21881
|
-
|
|
21882
|
-
|
|
21883
|
-
|
|
22044
|
+
}
|
|
22045
|
+
console.log('未匹配到area,尝试直接匹配城市');
|
|
22046
|
+
|
|
22047
|
+
// 如果没找到 area,尝试直接匹配城市名
|
|
22048
|
+
var _iterator3 = _createForOfIteratorHelper(matchedProvince.city),
|
|
22049
|
+
_step3;
|
|
22050
|
+
try {
|
|
22051
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
22052
|
+
var _city = _step3.value;
|
|
22053
|
+
var cityName = _city.name;
|
|
22054
|
+
var _idx2 = remaining.indexOf(cityName);
|
|
22055
|
+
if (_idx2 > -1 && _idx2 < 10) {
|
|
22056
|
+
parse.city = cityName;
|
|
22057
|
+
remaining = remaining.substring(_idx2 + cityName.length);
|
|
22058
|
+
|
|
22059
|
+
// 尝试在剩余部分找 area
|
|
22060
|
+
if (_city.area && _city.area.length > 0) {
|
|
22061
|
+
var sortedAreas = _toConsumableArray(_city.area).filter(function (a) {
|
|
22062
|
+
return a && a.length >= 2;
|
|
22063
|
+
}).sort(function (a, b) {
|
|
22064
|
+
return b.length - a.length;
|
|
22065
|
+
});
|
|
22066
|
+
var _iterator5 = _createForOfIteratorHelper(sortedAreas),
|
|
22067
|
+
_step5;
|
|
22068
|
+
try {
|
|
22069
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
22070
|
+
var _areaName = _step5.value;
|
|
22071
|
+
var areaIdx = remaining.indexOf(_areaName);
|
|
22072
|
+
if (areaIdx > -1 && areaIdx < 10) {
|
|
22073
|
+
parse.area = _areaName;
|
|
22074
|
+
remaining = remaining.substring(areaIdx + _areaName.length);
|
|
22075
|
+
break;
|
|
22076
|
+
}
|
|
22077
|
+
}
|
|
22078
|
+
} catch (err) {
|
|
22079
|
+
_iterator5.e(err);
|
|
22080
|
+
} finally {
|
|
22081
|
+
_iterator5.f();
|
|
22082
|
+
}
|
|
22083
|
+
}
|
|
22084
|
+
parse.addr = remaining.trim();
|
|
22085
|
+
return parse;
|
|
22086
|
+
}
|
|
21884
22087
|
}
|
|
22088
|
+
} catch (err) {
|
|
22089
|
+
_iterator3.e(err);
|
|
22090
|
+
} finally {
|
|
22091
|
+
_iterator3.f();
|
|
21885
22092
|
}
|
|
21886
22093
|
}
|
|
22094
|
+
parse.addr = remaining;
|
|
21887
22095
|
return parse;
|
|
21888
22096
|
}
|
|
21889
22097
|
|
|
22098
|
+
/**
|
|
22099
|
+
* 新增:通过 area 反查省份和城市(当正向匹配省份失败时使用)
|
|
22100
|
+
*/
|
|
22101
|
+
function findProvinceByArea(address) {
|
|
22102
|
+
if (!mArea) return null;
|
|
22103
|
+
|
|
22104
|
+
// 收集所有 area
|
|
22105
|
+
var allAreas = [];
|
|
22106
|
+
for (var areaName in mArea) {
|
|
22107
|
+
if (areaName && areaName.length >= 2) {
|
|
22108
|
+
var idx = address.indexOf(areaName);
|
|
22109
|
+
if (idx > -1 && idx < 10) {
|
|
22110
|
+
allAreas.push({
|
|
22111
|
+
name: areaName,
|
|
22112
|
+
index: idx,
|
|
22113
|
+
data: mArea[areaName]
|
|
22114
|
+
});
|
|
22115
|
+
}
|
|
22116
|
+
}
|
|
22117
|
+
}
|
|
22118
|
+
|
|
22119
|
+
// 按位置排序,取最早出现的
|
|
22120
|
+
allAreas.sort(function (a, b) {
|
|
22121
|
+
return a.index - b.index;
|
|
22122
|
+
});
|
|
22123
|
+
if (allAreas.length > 0) {
|
|
22124
|
+
var bestMatch = allAreas[0];
|
|
22125
|
+
var areaData = bestMatch.data;
|
|
22126
|
+
if (areaData && areaData.length >= 1) {
|
|
22127
|
+
return {
|
|
22128
|
+
province: areaData[0].p,
|
|
22129
|
+
city: areaData[0].c,
|
|
22130
|
+
area: bestMatch.name,
|
|
22131
|
+
addr: address.substring(bestMatch.index + bestMatch.name.length)
|
|
22132
|
+
};
|
|
22133
|
+
}
|
|
22134
|
+
}
|
|
22135
|
+
return null;
|
|
22136
|
+
}
|
|
22137
|
+
|
|
21890
22138
|
/**
|
|
21891
22139
|
* 逆向解析 从后【县,区,旗】往前解析
|
|
21892
22140
|
* 有地区就能大概返回地址了
|
|
@@ -21904,162 +22152,96 @@ function detail_parse(address) {
|
|
|
21904
22152
|
area: '',
|
|
21905
22153
|
name: '',
|
|
21906
22154
|
_area: '',
|
|
21907
|
-
addr:
|
|
22155
|
+
addr: address
|
|
21908
22156
|
};
|
|
21909
|
-
|
|
21910
|
-
|
|
21911
|
-
|
|
21912
|
-
|
|
21913
|
-
|
|
21914
|
-
|
|
21915
|
-
|
|
21916
|
-
|
|
21917
|
-
|
|
21918
|
-
|
|
21919
|
-
|
|
21920
|
-
|
|
21921
|
-
|
|
21922
|
-
|
|
21923
|
-
|
|
21924
|
-
|
|
21925
|
-
|
|
21926
|
-
|
|
21927
|
-
|
|
21928
|
-
|
|
21929
|
-
var pos = address.indexOf(areaName);
|
|
21930
|
-
if (pos !== -1 && pos <= areaIndex && pos >= Math.max(0, areaIndex - 6)) {
|
|
21931
|
-
possibleAreas.push(areaName);
|
|
21932
|
-
}
|
|
21933
|
-
}
|
|
21934
|
-
}
|
|
21935
|
-
if (possibleAreas.length > 0) {
|
|
21936
|
-
// 按长度降序排列,优先选择较长的匹配项
|
|
21937
|
-
possibleAreas.sort(function (a, b) {
|
|
21938
|
-
return b.length - a.length;
|
|
21939
|
-
});
|
|
21940
|
-
parse.area = possibleAreas[0];
|
|
21941
|
-
areaIndex = address.lastIndexOf(parse.area);
|
|
21942
|
-
} else {
|
|
21943
|
-
parse.area = address.substr(areaIndex - 2, 3);
|
|
22157
|
+
if (!address || address.length === 0) {
|
|
22158
|
+
return parse;
|
|
22159
|
+
}
|
|
22160
|
+
address = address.replace(/ {2,}/g, ' ').trim();
|
|
22161
|
+
|
|
22162
|
+
// 查找 area
|
|
22163
|
+
if (!ignoreArea && mArea) {
|
|
22164
|
+
var bestMatch = null;
|
|
22165
|
+
for (var areaName in mArea) {
|
|
22166
|
+
if (!areaName || areaName === '其他' || areaName === '其它区' || areaName === '其他区' || areaName.length < 2) {
|
|
22167
|
+
continue;
|
|
22168
|
+
}
|
|
22169
|
+
var idx = address.indexOf(areaName);
|
|
22170
|
+
if (idx > -1) {
|
|
22171
|
+
if (!bestMatch || idx < bestMatch.index || idx === bestMatch.index && areaName.length > bestMatch.name.length) {
|
|
22172
|
+
bestMatch = {
|
|
22173
|
+
name: areaName,
|
|
22174
|
+
index: idx,
|
|
22175
|
+
data: mArea[areaName]
|
|
22176
|
+
};
|
|
21944
22177
|
}
|
|
21945
22178
|
}
|
|
21946
22179
|
}
|
|
21947
|
-
if (
|
|
21948
|
-
|
|
21949
|
-
|
|
21950
|
-
|
|
21951
|
-
|
|
21952
|
-
|
|
22180
|
+
if (bestMatch) {
|
|
22181
|
+
console.log('逆向匹配到area:', bestMatch.name, '位置:', bestMatch.index);
|
|
22182
|
+
parse.area = bestMatch.name;
|
|
22183
|
+
parse.addr = address.substring(bestMatch.index + bestMatch.name.length).trim();
|
|
22184
|
+
var areaData = bestMatch.data;
|
|
22185
|
+
if (areaData.length === 1) {
|
|
22186
|
+
parse.province = areaData[0].p;
|
|
22187
|
+
parse.city = areaData[0].c;
|
|
22188
|
+
console.log('逆向确定省市:', parse.province, parse.city);
|
|
21953
22189
|
} else {
|
|
21954
|
-
|
|
21955
|
-
|
|
21956
|
-
|
|
21957
|
-
|
|
21958
|
-
|
|
21959
|
-
|
|
21960
|
-
|
|
21961
|
-
|
|
22190
|
+
console.log('该area有多个城市:', areaData.map(function (d) {
|
|
22191
|
+
return d.c;
|
|
22192
|
+
}));
|
|
22193
|
+
|
|
22194
|
+
// 通过上下文判断
|
|
22195
|
+
var _iterator6 = _createForOfIteratorHelper(areaData),
|
|
22196
|
+
_step6;
|
|
22197
|
+
try {
|
|
22198
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
22199
|
+
var _candidate = _step6.value;
|
|
22200
|
+
if (address.includes(_candidate.c)) {
|
|
22201
|
+
parse.province = _candidate.p;
|
|
22202
|
+
parse.city = _candidate.c;
|
|
22203
|
+
break;
|
|
21962
22204
|
}
|
|
21963
22205
|
}
|
|
22206
|
+
} catch (err) {
|
|
22207
|
+
_iterator6.e(err);
|
|
22208
|
+
} finally {
|
|
22209
|
+
_iterator6.f();
|
|
21964
22210
|
}
|
|
21965
|
-
if (
|
|
21966
|
-
|
|
21967
|
-
|
|
21968
|
-
|
|
21969
|
-
|
|
21970
|
-
|
|
21971
|
-
|
|
21972
|
-
|
|
21973
|
-
|
|
22211
|
+
if (!parse.city) {
|
|
22212
|
+
var _iterator7 = _createForOfIteratorHelper(areaData),
|
|
22213
|
+
_step7;
|
|
22214
|
+
try {
|
|
22215
|
+
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
22216
|
+
var candidate = _step7.value;
|
|
22217
|
+
var cityShort = candidate.c.replace('市', '');
|
|
22218
|
+
if (cityShort.length >= 2 && address.includes(cityShort)) {
|
|
22219
|
+
parse.province = candidate.p;
|
|
22220
|
+
parse.city = candidate.c;
|
|
22221
|
+
break;
|
|
22222
|
+
}
|
|
22223
|
+
}
|
|
22224
|
+
} catch (err) {
|
|
22225
|
+
_iterator7.e(err);
|
|
22226
|
+
} finally {
|
|
22227
|
+
_iterator7.f();
|
|
22228
|
+
}
|
|
21974
22229
|
}
|
|
21975
22230
|
}
|
|
21976
22231
|
}
|
|
21977
|
-
parse.addr = address.substr(areaIndex + 1);
|
|
21978
|
-
} else {
|
|
21979
|
-
if (address.indexOf('市') > -1) {
|
|
21980
|
-
areaIndex = address.indexOf('市');
|
|
21981
|
-
parse.area = address.substr(areaIndex - 2, 3);
|
|
21982
|
-
parse.addr = address.substr(areaIndex + 1);
|
|
21983
|
-
} else {
|
|
21984
|
-
parse.addr = address;
|
|
21985
|
-
}
|
|
21986
|
-
}
|
|
21987
|
-
if (address.indexOf('市') > -1 || address.indexOf('盟') > -1 || address.indexOf('州') > -1) {
|
|
21988
|
-
if (address.indexOf('市') > -1) {
|
|
21989
|
-
parse._area = address.substr(address.indexOf('市') - 2, 2);
|
|
21990
|
-
}
|
|
21991
|
-
if (address.indexOf('盟') > -1 && !mCity[parse._area]) {
|
|
21992
|
-
parse._area = address.substr(address.indexOf('盟') - 2, 2);
|
|
21993
|
-
}
|
|
21994
|
-
if (address.indexOf('州') > -1 && !mCity[parse._area]) {
|
|
21995
|
-
parse._area = address.substr(address.indexOf('州') - 2, 2);
|
|
21996
|
-
}
|
|
21997
22232
|
}
|
|
21998
|
-
parse.area = parse.area.trim();
|
|
21999
|
-
|
|
22000
|
-
// 确保选择最长的匹配项
|
|
22001
|
-
if (parse.area && mArea[parse.area]) {
|
|
22002
|
-
// 检查是否有更长的匹配项
|
|
22003
|
-
var checkLongerMatch = function checkLongerMatch(currentArea, addressSubstring, endIndex) {
|
|
22004
|
-
var longerMatch = currentArea;
|
|
22005
|
-
// 检查在当前地址片段中是否存在更长的匹配项
|
|
22006
|
-
for (var _areaName2 in mArea) {
|
|
22007
|
-
if (addressSubstring.includes(_areaName2) && _areaName2.length > longerMatch.length && (_areaName2.endsWith('县') || _areaName2.endsWith('区') || _areaName2.endsWith('旗'))) {
|
|
22008
|
-
var _pos2 = addressSubstring.lastIndexOf(_areaName2);
|
|
22009
|
-
if (_pos2 !== -1 && _pos2 <= endIndex) {
|
|
22010
|
-
longerMatch = _areaName2;
|
|
22011
|
-
}
|
|
22012
|
-
}
|
|
22013
|
-
}
|
|
22014
|
-
return longerMatch;
|
|
22015
|
-
};
|
|
22016
22233
|
|
|
22017
|
-
|
|
22018
|
-
|
|
22019
|
-
|
|
22020
|
-
|
|
22021
|
-
|
|
22022
|
-
|
|
22023
|
-
|
|
22024
|
-
|
|
22025
|
-
}
|
|
22026
|
-
if (mArea[parse.area].length === 1) {
|
|
22027
|
-
parse.province = mArea[parse.area][0].p;
|
|
22028
|
-
parse.city = mArea[parse.area][0].c;
|
|
22029
|
-
} else {
|
|
22030
|
-
parse._area = parse._area.trim();
|
|
22031
|
-
var addr = address.substr(0, areaIndex);
|
|
22032
|
-
var d = mArea[parse.area].find(function (item) {
|
|
22033
|
-
return item.p.indexOf(addr) > -1 || item.c === parse._area;
|
|
22034
|
-
});
|
|
22035
|
-
if (d) {
|
|
22036
|
-
parse.province = d.p;
|
|
22037
|
-
parse.city = d.c;
|
|
22038
|
-
} else {
|
|
22039
|
-
parse.result = mArea[parse.area];
|
|
22040
|
-
}
|
|
22041
|
-
}
|
|
22042
|
-
} else {
|
|
22043
|
-
if (parse._area) {
|
|
22044
|
-
var city = mCity[parse._area];
|
|
22045
|
-
if (city) {
|
|
22046
|
-
parse.province = city[0].p;
|
|
22047
|
-
parse.city = city[0].c;
|
|
22048
|
-
parse.addr = address.substr(address.indexOf(parse.city) + parse.city.length + 1);
|
|
22049
|
-
parse.area = '';
|
|
22050
|
-
for (var i in city[0].a) {
|
|
22051
|
-
if (parse.addr.indexOf(city[0].a[i]) === 0) {
|
|
22052
|
-
parse.area = city[0].a[i];
|
|
22053
|
-
parse.addr = parse.addr.replace(city[0].a[i], '');
|
|
22054
|
-
break;
|
|
22055
|
-
}
|
|
22056
|
-
}
|
|
22234
|
+
// 通过城市名匹配
|
|
22235
|
+
if (!parse.city && mCity) {
|
|
22236
|
+
for (var cityName in mCity) {
|
|
22237
|
+
if (cityName && cityName.length >= 2 && address.includes(cityName)) {
|
|
22238
|
+
parse.city = cityName;
|
|
22239
|
+
parse.province = mCity[cityName][0].p;
|
|
22240
|
+
console.log('通过城市名匹配:', parse.province, parse.city);
|
|
22241
|
+
break;
|
|
22057
22242
|
}
|
|
22058
|
-
} else {
|
|
22059
|
-
parse.area = '';
|
|
22060
22243
|
}
|
|
22061
22244
|
}
|
|
22062
|
-
parse.addr = parse.addr.trim();
|
|
22063
22245
|
return parse;
|
|
22064
22246
|
}
|
|
22065
22247
|
var MUNICIPALITIES = ['上海', '北京', '天津', '重庆'];
|
|
@@ -23656,13 +23838,13 @@ function formatColumnVal(component, values, power) {
|
|
|
23656
23838
|
}
|
|
23657
23839
|
// 级联组件关联其他组件查询选项
|
|
23658
23840
|
if (data.extraInfo.relationColumns && values) {
|
|
23659
|
-
var
|
|
23841
|
+
var extCondition = {};
|
|
23660
23842
|
data.extraInfo.relationColumns.forEach(function (i) {
|
|
23661
23843
|
if (values[i]) {
|
|
23662
|
-
|
|
23844
|
+
extCondition[i] = values[i].code;
|
|
23663
23845
|
}
|
|
23664
23846
|
});
|
|
23665
|
-
data.postData.
|
|
23847
|
+
data.postData.extCondition = JSON.stringify(extCondition);
|
|
23666
23848
|
}
|
|
23667
23849
|
data.pathUrl = '/v2/project/column/select';
|
|
23668
23850
|
}
|