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