@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.
@@ -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
- // const mobileReg = /(86-[1][0-9]{10})|(86[1][0-9]{10})|([1][0-9]{10})/g;
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
- address = address.replace(/ {2,}/, ' ');
21709
- var detail = detail_parse_forward(address.trim(), sourceData);
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.trim());
21737
+ detail = detail_parse(address);
21738
+ console.log('逆向解析结果:', JSON.stringify(detail));
21712
21739
  if (detail.area && !detail.city) {
21713
- detail = detail_parse(address.trim(), {
21740
+ detail = detail_parse(address, {
21714
21741
  ignoreArea: true
21715
21742
  });
21716
- // console.log('smart_parse->ignoreArea');
21717
- } else {
21718
- // console.log('smart_parse');
21743
+ console.log('ignoreArea解析结果:', JSON.stringify(detail));
21719
21744
  }
21720
- //这个待完善
21721
- var list = address.replace(detail.province, '').replace(detail.city, '').replace(detail.area, '').split(' ').filter(function (str) {
21722
- return str;
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 (list.length > 1) {
21725
- list.forEach(function (str) {
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.province = detail.province;
21756
- parse.city = detail.city;
21757
- parse.area = detail.area;
21758
- parse.street = detail.street;
21759
- parse.addr = detail.addr;
21760
- parse.result = detail.result;
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
- var addressCopy = address;
21808
- var provinceKey = ['特别行政区', '古自治区', '维吾尔自治区', '壮族自治区', '回族自治区', '自治区', '省省直辖', '省', '市'];
21809
- var cityKey = ['布依族苗族自治州', '苗族侗族自治州', '自治州', '州', '市', '县'];
21810
- for (var i in defaultData) {
21811
- var province = defaultData[i];
21812
- var provinceSimple = province.name.replace('省', '');
21813
- var index = address.indexOf(province.name);
21814
- if (index == -1) {
21815
- if (address.indexOf(provinceSimple) > -1) {
21816
- // address= address.replace(provinceSimple,province.name);
21817
- index = address.indexOf(provinceSimple);
21818
- }
21819
- }
21820
- if (index > -1) {
21821
- if (index > 0) {
21822
- //省份不是在第一位,在省份之前的字段识别为名称
21823
- parse.name = address.substr(0, index).trim();
21824
- }
21825
- parse.province = province.name;
21826
- address = address.substr(index + provinceSimple.length);
21827
- for (var k in provinceKey) {
21828
- if (address.indexOf(provinceKey[k]) === 0) {
21829
- address = address.substr(provinceKey[k].length);
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
- for (var j in province.city) {
21833
- var city = province.city[j];
21834
- index = address.indexOf(city.name);
21835
- var citySimple = city.name.replace('市', '');
21836
- if (index == -1) {
21837
- if (address.indexOf(citySimple) > -1) {
21838
- // address= address.replace(citySimple,city.name);
21839
- index = address.indexOf(citySimple);
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
- if (index > -1 && index < 3) {
21843
- parse.city = city.name;
21844
- address = address.substr(index + citySimple.length);
21845
- for (var _k in cityKey) {
21846
- if (address.indexOf(cityKey[_k]) === 0) {
21847
- address = address.substr(cityKey[_k].length);
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
- if (city.area) {
21851
- // 对区域进行排序,优先匹配较长的区域名(如:临澧县优先于澧县)
21852
- var sortedAreas = _toConsumableArray(city.area).sort(function (a, b) {
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
- for (var _k2 in sortedAreas) {
21856
- var area = sortedAreas[_k2];
21857
- index = address.indexOf(area);
21858
- if (index > -1 && index < 3) {
21859
- parse.area = area;
21860
- address = address.substr(index + parse.area.length);
21861
- if (city.street && city.street[area] && sourceData && sourceData.extraInfo && sourceData.extraInfo.isFourAddress) {
21862
- for (var m in city.street[area]) {
21863
- var street = city.street[area][m];
21864
- var indexStreet = address.indexOf(street);
21865
- if (indexStreet > -1) {
21866
- parse.street = street;
21867
- address = address.substr(indexStreet + parse.street.length);
21868
- break;
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
- parse.addr = address.trim();
21880
- if (parse.city) {
21881
- break;
21882
- } else if (parse.province) {
21883
- address = addressCopy;
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
- var areaIndex = -1,
21910
- cityIndex = -1;
21911
- address = address.replace(' ', ' ');
21912
- if (!ignoreArea && address.indexOf('县') > -1 || !ignoreArea && address.indexOf('区') > -1 || !ignoreArea && address.indexOf('旗') > -1) {
21913
- if (address.indexOf('旗') > -1) {
21914
- areaIndex = address.indexOf('旗');
21915
- parse.area = address.substr(areaIndex - 1, 2);
21916
- }
21917
- if (address.indexOf('区') > -1) {
21918
- // 改进区名识别逻辑,优先匹配地址库中存在的完整区名
21919
- areaIndex = address.indexOf('区');
21920
- if (address.lastIndexOf('市', areaIndex) > -1) {
21921
- cityIndex = address.lastIndexOf('市', areaIndex);
21922
- parse.area = address.substr(cityIndex + 1, areaIndex - cityIndex);
21923
- } else {
21924
- // 查找所有可能的区名,优先选择较长的匹配项
21925
- var possibleAreas = [];
21926
- // 从地址中寻找所有可能的区名
21927
- for (var areaName in mArea) {
21928
- if (address.includes(areaName) && areaName.endsWith('区')) {
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 (address.indexOf('县') > -1) {
21948
- // 改进县名识别逻辑,优先匹配地址库中存在的完整县名
21949
- areaIndex = address.lastIndexOf('县');
21950
- if (address.lastIndexOf('市', areaIndex) > -1) {
21951
- cityIndex = address.lastIndexOf('市', areaIndex);
21952
- parse.area = address.substr(cityIndex + 1, areaIndex - cityIndex);
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
- var _possibleAreas = [];
21956
- // 从地址中寻找所有可能的县名
21957
- for (var _areaName in mArea) {
21958
- if (address.includes(_areaName) && _areaName.endsWith('县')) {
21959
- var _pos = address.indexOf(_areaName);
21960
- if (_pos !== -1 && _pos <= areaIndex && _pos >= Math.max(0, areaIndex - 6)) {
21961
- _possibleAreas.push(_areaName);
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 (_possibleAreas.length > 0) {
21966
- // 按长度降序排列,优先选择较长的匹配项
21967
- _possibleAreas.sort(function (a, b) {
21968
- return b.length - a.length;
21969
- });
21970
- parse.area = _possibleAreas[0];
21971
- areaIndex = address.lastIndexOf(parse.area);
21972
- } else {
21973
- parse.area = address.substr(areaIndex - 2, 3);
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
- var originalArea = parse.area;
22019
- if (address) {
22020
- parse.area = checkLongerMatch(parse.area, address, areaIndex);
22021
- // 如果区域名称发生变化,更新areaIndex
22022
- if (parse.area !== originalArea) {
22023
- areaIndex = address.lastIndexOf(parse.area);
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 condition = {};
23841
+ var extCondition = {};
23660
23842
  data.extraInfo.relationColumns.forEach(function (i) {
23661
23843
  if (values[i]) {
23662
- condition[i] = values[i].code;
23844
+ extCondition[i] = values[i].code;
23663
23845
  }
23664
23846
  });
23665
- data.postData.condition = JSON.stringify(condition);
23847
+ data.postData.extCondition = JSON.stringify(extCondition);
23666
23848
  }
23667
23849
  data.pathUrl = '/v2/project/column/select';
23668
23850
  }