hookehuyr

优化代码

......@@ -96,6 +96,9 @@ const props = defineProps({
province: '',
city: '',
county: '',
province_code: '',
city_code: '',
county_code: '',
detail_address: '',
full_address: ''
})
......@@ -141,6 +144,9 @@ const fullAddress = computed(() => {
* @param {Object} addressData - 地址数据对象
*/
const initAddressData = (addressData) => {
// 统一设置详细地址
detailAddress.value = addressData.detail_address || addressData.idcard_address || ''
// 优先使用code值来设置级联选择器的选中状态
if (addressData.province_code && addressData.city_code && addressData.county_code) {
selectedAreaCodes.value = [
......@@ -156,15 +162,11 @@ const initAddressData = (addressData) => {
if (provinceNode && cityNode && countyNode) {
selectedAreaText.value = `${provinceNode.text}${cityNode.text}${countyNode.text}`
}
detailAddress.value = addressData.detail_address || addressData.idcard_address || ''
} else if (addressData.province && addressData.city && addressData.county) {
// 兼容旧的文本格式
selectedAreaText.value = `${addressData.province}${addressData.city}${addressData.county}`
detailAddress.value = addressData.detail_address || addressData.idcard_address || ''
// 尝试根据文本查找对应的code值(可选实现)
} else {
selectedAreaText.value = ''
detailAddress.value = addressData.detail_address || addressData.idcard_address || ''
selectedAreaCodes.value = []
}
}
......@@ -223,10 +225,9 @@ const closeModal = () => {
const confirmAddress = () => {
if (selectedAreaText.value && detailAddress.value.trim()) {
const codes = selectedAreaCodes.value
const areaText = getAreaTextFromCodes()
const addressData = {
province: getProvinceFromText(selectedAreaText.value),
city: getCityFromText(selectedAreaText.value),
county: getCountyFromText(selectedAreaText.value),
...areaText,
province_code: codes[0] || '',
city_code: codes[1] || '',
county_code: codes[2] || '',
......@@ -244,56 +245,35 @@ const confirmAddress = () => {
}
/**
* 从选中文本中提取省份
* @param {String} text - 选中的地区文本
* @returns {String} - 省份名称
* 根据选中的codes获取地区文本信息
* @returns {Object} - 包含省市县文本的对象
*/
const getProvinceFromText = (text) => {
// 这里可以根据实际需要实现更精确的解析逻辑
// 暂时使用简单的方式
const getAreaTextFromCodes = () => {
const codes = selectedAreaCodes.value
const result = { province: '', city: '', county: '' }
if (codes.length >= 1) {
const provinceNode = findNodeByCode(areaData.value, codes[0])
return provinceNode ? provinceNode.text : ''
}
return ''
}
if (provinceNode) {
result.province = provinceNode.text
/**
* 从选中文本中提取城市
* @param {String} text - 选中的地区文本
* @returns {String} - 城市名称
*/
const getCityFromText = (text) => {
const codes = selectedAreaCodes.value
if (codes.length >= 2) {
const provinceNode = findNodeByCode(areaData.value, codes[0])
if (provinceNode && provinceNode.children) {
if (codes.length >= 2 && provinceNode.children) {
const cityNode = findNodeByCode(provinceNode.children, codes[1])
return cityNode ? cityNode.text : ''
}
}
return ''
}
if (cityNode) {
result.city = cityNode.text
/**
* 从选中文本中提取县区
* @param {String} text - 选中的地区文本
* @returns {String} - 县区名称
*/
const getCountyFromText = (text) => {
const codes = selectedAreaCodes.value
if (codes.length >= 3) {
const provinceNode = findNodeByCode(areaData.value, codes[0])
if (provinceNode && provinceNode.children) {
const cityNode = findNodeByCode(provinceNode.children, codes[1])
if (cityNode && cityNode.children) {
if (codes.length >= 3 && cityNode.children) {
const countyNode = findNodeByCode(cityNode.children, codes[2])
return countyNode ? countyNode.text : ''
if (countyNode) {
result.county = countyNode.text
}
}
}
return ''
}
}
}
return result
}
/**
......
<!--
* @Date: 2022-09-19 14:11:06
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-08-12 18:08:16
* @LastEditTime: 2025-08-12 18:30:09
* @FilePath: /jgdl/src/pages/collectionSettings/index.vue
* @Description: 收款设置
-->
......@@ -460,6 +460,7 @@ const getUserInfo = async () => {
// 同时更新地址选择器的数据,包含code值用于还原选中状态
if (userInfo.idcard_province && userInfo.idcard_city && userInfo.idcard_district) {
const detailAddr = userInfo.idcard_address || ''
addressData.value = {
province: userInfo.province_name || '',
city: userInfo.city_name || '',
......@@ -467,9 +468,9 @@ const getUserInfo = async () => {
province_code: userInfo.idcard_province,
city_code: userInfo.idcard_city,
county_code: userInfo.idcard_district,
detail_address: userInfo.idcard_address || '',
idcard_address: userInfo.idcard_address || '',
full_address: `${userInfo.province_name || ''}${userInfo.city_name || ''}${userInfo.county_name || userInfo.district_name || ''} ${userInfo.idcard_address || ''}`.trim()
detail_address: detailAddr,
idcard_address: detailAddr,
full_address: `${userInfo.province_name || ''}${userInfo.city_name || ''}${userInfo.county_name || userInfo.district_name || ''} ${detailAddr}`.trim()
};
}
}
......@@ -1144,16 +1145,18 @@ const addressData = ref({
* @param {Object} address - 地址数据对象
*/
const onAddressChange = (address) => {
// 更新临时身份信息中的地址字段(中文名称,用于显示)
tempIdentityInfo.value.province = address.province
tempIdentityInfo.value.city = address.city
tempIdentityInfo.value.county = address.county
// 更新身份证地址字段(真实字段名,用于提交)
tempIdentityInfo.value.idcard_province = address.province_code || address.province
tempIdentityInfo.value.idcard_city = address.city_code || address.city
tempIdentityInfo.value.idcard_district = address.county_code || address.county
tempIdentityInfo.value.idcard_address = address.detail_address
// 批量更新临时身份信息
Object.assign(tempIdentityInfo.value, {
// 地址字段(中文名称,用于显示)
province: address.province,
city: address.city,
county: address.county,
// 身份证地址字段(真实字段名,用于提交)
idcard_province: address.province_code || address.province,
idcard_city: address.city_code || address.city,
idcard_district: address.county_code || address.county,
idcard_address: address.detail_address
})
}
</script>
......