@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.
@@ -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
- // const mobileReg = /(86-[1][0-9]{10})|(86[1][0-9]{10})|([1][0-9]{10})/g;
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
- address = address.replace(/ {2,}/, ' ');
21691
- var detail = detail_parse_forward(address.trim(), sourceData);
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.trim());
21719
+ detail = detail_parse(address);
21720
+ console.log('逆向解析结果:', JSON.stringify(detail));
21694
21721
  if (detail.area && !detail.city) {
21695
- detail = detail_parse(address.trim(), {
21722
+ detail = detail_parse(address, {
21696
21723
  ignoreArea: true
21697
21724
  });
21698
- // console.log('smart_parse->ignoreArea');
21699
- } else {
21700
- // console.log('smart_parse');
21725
+ console.log('ignoreArea解析结果:', JSON.stringify(detail));
21701
21726
  }
21702
- //这个待完善
21703
- var list = address.replace(detail.province, '').replace(detail.city, '').replace(detail.area, '').split(' ').filter(function (str) {
21704
- return str;
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 (list.length > 1) {
21707
- list.forEach(function (str) {
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.province = detail.province;
21738
- parse.city = detail.city;
21739
- parse.area = detail.area;
21740
- parse.street = detail.street;
21741
- parse.addr = detail.addr;
21742
- parse.result = detail.result;
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
- var addressCopy = address;
21790
- var provinceKey = ['特别行政区', '古自治区', '维吾尔自治区', '壮族自治区', '回族自治区', '自治区', '省省直辖', '省', '市'];
21791
- var cityKey = ['布依族苗族自治州', '苗族侗族自治州', '自治州', '州', '市', '县'];
21792
- for (var i in defaultData) {
21793
- var province = defaultData[i];
21794
- var provinceSimple = province.name.replace('省', '');
21795
- var index = address.indexOf(province.name);
21796
- if (index == -1) {
21797
- if (address.indexOf(provinceSimple) > -1) {
21798
- // address= address.replace(provinceSimple,province.name);
21799
- index = address.indexOf(provinceSimple);
21800
- }
21801
- }
21802
- if (index > -1) {
21803
- if (index > 0) {
21804
- //省份不是在第一位,在省份之前的字段识别为名称
21805
- parse.name = address.substr(0, index).trim();
21806
- }
21807
- parse.province = province.name;
21808
- address = address.substr(index + provinceSimple.length);
21809
- for (var k in provinceKey) {
21810
- if (address.indexOf(provinceKey[k]) === 0) {
21811
- address = address.substr(provinceKey[k].length);
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
- for (var j in province.city) {
21815
- var city = province.city[j];
21816
- index = address.indexOf(city.name);
21817
- var citySimple = city.name.replace('市', '');
21818
- if (index == -1) {
21819
- if (address.indexOf(citySimple) > -1) {
21820
- // address= address.replace(citySimple,city.name);
21821
- index = address.indexOf(citySimple);
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
- if (index > -1 && index < 3) {
21825
- parse.city = city.name;
21826
- address = address.substr(index + citySimple.length);
21827
- for (var _k in cityKey) {
21828
- if (address.indexOf(cityKey[_k]) === 0) {
21829
- address = address.substr(cityKey[_k].length);
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
- if (city.area) {
21833
- // 对区域进行排序,优先匹配较长的区域名(如:临澧县优先于澧县)
21834
- var sortedAreas = _toConsumableArray(city.area).sort(function (a, b) {
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
- for (var _k2 in sortedAreas) {
21838
- var area = sortedAreas[_k2];
21839
- index = address.indexOf(area);
21840
- if (index > -1 && index < 3) {
21841
- parse.area = area;
21842
- address = address.substr(index + parse.area.length);
21843
- if (city.street && city.street[area] && sourceData && sourceData.extraInfo && sourceData.extraInfo.isFourAddress) {
21844
- for (var m in city.street[area]) {
21845
- var street = city.street[area][m];
21846
- var indexStreet = address.indexOf(street);
21847
- if (indexStreet > -1) {
21848
- parse.street = street;
21849
- address = address.substr(indexStreet + parse.street.length);
21850
- break;
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
- parse.addr = address.trim();
21862
- if (parse.city) {
21863
- break;
21864
- } else if (parse.province) {
21865
- address = addressCopy;
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
- var areaIndex = -1,
21892
- cityIndex = -1;
21893
- address = address.replace(' ', ' ');
21894
- if (!ignoreArea && address.indexOf('县') > -1 || !ignoreArea && address.indexOf('区') > -1 || !ignoreArea && address.indexOf('旗') > -1) {
21895
- if (address.indexOf('旗') > -1) {
21896
- areaIndex = address.indexOf('旗');
21897
- parse.area = address.substr(areaIndex - 1, 2);
21898
- }
21899
- if (address.indexOf('区') > -1) {
21900
- // 改进区名识别逻辑,优先匹配地址库中存在的完整区名
21901
- areaIndex = address.indexOf('区');
21902
- if (address.lastIndexOf('市', areaIndex) > -1) {
21903
- cityIndex = address.lastIndexOf('市', areaIndex);
21904
- parse.area = address.substr(cityIndex + 1, areaIndex - cityIndex);
21905
- } else {
21906
- // 查找所有可能的区名,优先选择较长的匹配项
21907
- var possibleAreas = [];
21908
- // 从地址中寻找所有可能的区名
21909
- for (var areaName in mArea) {
21910
- if (address.includes(areaName) && areaName.endsWith('区')) {
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 (address.indexOf('县') > -1) {
21930
- // 改进县名识别逻辑,优先匹配地址库中存在的完整县名
21931
- areaIndex = address.lastIndexOf('县');
21932
- if (address.lastIndexOf('市', areaIndex) > -1) {
21933
- cityIndex = address.lastIndexOf('市', areaIndex);
21934
- parse.area = address.substr(cityIndex + 1, areaIndex - cityIndex);
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
- var _possibleAreas = [];
21938
- // 从地址中寻找所有可能的县名
21939
- for (var _areaName in mArea) {
21940
- if (address.includes(_areaName) && _areaName.endsWith('县')) {
21941
- var _pos = address.indexOf(_areaName);
21942
- if (_pos !== -1 && _pos <= areaIndex && _pos >= Math.max(0, areaIndex - 6)) {
21943
- _possibleAreas.push(_areaName);
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 (_possibleAreas.length > 0) {
21948
- // 按长度降序排列,优先选择较长的匹配项
21949
- _possibleAreas.sort(function (a, b) {
21950
- return b.length - a.length;
21951
- });
21952
- parse.area = _possibleAreas[0];
21953
- areaIndex = address.lastIndexOf(parse.area);
21954
- } else {
21955
- parse.area = address.substr(areaIndex - 2, 3);
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
- var originalArea = parse.area;
22001
- if (address) {
22002
- parse.area = checkLongerMatch(parse.area, address, areaIndex);
22003
- // 如果区域名称发生变化,更新areaIndex
22004
- if (parse.area !== originalArea) {
22005
- areaIndex = address.lastIndexOf(parse.area);
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 condition = {};
23823
+ var extCondition = {};
23642
23824
  data.extraInfo.relationColumns.forEach(function (i) {
23643
23825
  if (values[i]) {
23644
- condition[i] = values[i].code;
23826
+ extCondition[i] = values[i].code;
23645
23827
  }
23646
23828
  });
23647
- data.postData.condition = JSON.stringify(condition);
23829
+ data.postData.extCondition = JSON.stringify(extCondition);
23648
23830
  }
23649
23831
  data.pathUrl = '/v2/project/column/select';
23650
23832
  }