hookehuyr

fix(collectionSettings): 修复地址显示异常并优化地址数据处理逻辑

修复地址显示中可能出现的'NaN'问题,并优化地址数据的拼接和处理逻辑,确保地址显示正确
<!--
* @Date: 2022-09-19 14:11:06
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-08-12 18:30:09
* @LastEditTime: 2025-08-13 09:50:04
* @FilePath: /jgdl/src/pages/collectionSettings/index.vue
* @Description: 收款设置
-->
......@@ -199,8 +199,8 @@
class="address-selector"
@click="showAddressSelector = true"
>
<text class="address-text" :class="{ 'address-selected': addressData.full_address }">
{{ addressData.full_address || '请选择省市县并填写详细地址' }}
<text class="address-text" :class="{ 'address-selected': addressData.full_address && addressData.full_address !== 'NaN' }">
{{ (addressData.full_address && addressData.full_address !== 'NaN' && addressData.full_address.trim()) || '请选择省市县并填写详细地址' }}
</text>
<RectRight color="#999" size="10" />
</view>
......@@ -447,7 +447,7 @@ const getUserInfo = async () => {
userInfo.idcard_city || '',
userInfo.idcard_district || ''
)
identityInfo.value = {
userName: userInfo.name,
idCard: userInfo.idcard,
......@@ -469,7 +469,7 @@ const getUserInfo = async () => {
// 同时更新地址选择器的数据,包含code值用于还原选中状态
if (userInfo.idcard_province && userInfo.idcard_city && userInfo.idcard_district) {
const detailAddr = userInfo.idcard_address || ''
addressData.value = {
province: areaText.province,
city: areaText.city,
......@@ -691,15 +691,28 @@ const openIdentityModal = () => {
* 初始化地址选择器数据
*/
const initAddressData = () => {
const province = tempIdentityInfo.value.province || ''
const city = tempIdentityInfo.value.city || ''
const county = tempIdentityInfo.value.county || ''
const detailAddress = tempIdentityInfo.value.idcard_address || ''
// 安全地拼接完整地址,只有在有有效数据时才拼接
let fullAddress = ''
if (province || city || county || detailAddress) {
const addressParts = [province, city, county].filter(part => part && part.trim())
const areaText = addressParts.join('')
fullAddress = detailAddress ? `${areaText} ${detailAddress}`.trim() : areaText
}
addressData.value = {
province: tempIdentityInfo.value.province || '',
city: tempIdentityInfo.value.city || '',
county: tempIdentityInfo.value.county || '',
province,
city,
county,
province_code: tempIdentityInfo.value.idcard_province || '',
city_code: tempIdentityInfo.value.idcard_city || '',
county_code: tempIdentityInfo.value.idcard_district || '',
detail_address: tempIdentityInfo.value.idcard_address || '',
full_address: (tempIdentityInfo.value.province + tempIdentityInfo.value.city + tempIdentityInfo.value.county + tempIdentityInfo.value.idcard_address) || ''
detail_address: detailAddress,
full_address: fullAddress
}
};
......@@ -1156,16 +1169,16 @@ const addressData = ref({
*/
const transformAreaData = (areaList) => {
const { province_list, city_list, county_list } = areaList
return Object.keys(province_list).map(provinceCode => {
const provinceName = province_list[provinceCode]
// 获取该省份下的所有城市
const cities = Object.keys(city_list)
.filter(cityCode => cityCode.startsWith(provinceCode.substring(0, 2)))
.map(cityCode => {
const cityName = city_list[cityCode]
// 获取该城市下的所有区县
const counties = Object.keys(county_list)
.filter(countyCode => countyCode.startsWith(cityCode.substring(0, 4)))
......@@ -1173,14 +1186,14 @@ const transformAreaData = (areaList) => {
value: countyCode,
text: county_list[countyCode]
}))
return {
value: cityCode,
text: cityName,
children: counties.length > 0 ? counties : undefined
}
})
return {
value: provinceCode,
text: provinceName,
......@@ -1204,19 +1217,19 @@ const areaData = ref(transformAreaData(areaList))
const getAreaTextFromCodes = (provinceCode, cityCode, countyCode) => {
const { province_list, city_list, county_list } = areaList
const result = { province: '', city: '', county: '' }
if (provinceCode && province_list[provinceCode]) {
result.province = province_list[provinceCode]
}
if (cityCode && city_list[cityCode]) {
result.city = city_list[cityCode]
}
if (countyCode && county_list[countyCode]) {
result.county = county_list[countyCode]
}
return result
}
......