hookehuyr

feat(collectionSettings): 根据地区编码获取地区文字显示

添加地区数据转换工具函数,将地区编码转换为对应的中文名称显示
......@@ -271,6 +271,7 @@ import { useUserStore } from '@/stores/user'
// 导入地址选择组件
import AddressSelector from '@/components/AddressSelector.vue'
import { regionData } from 'element-china-area-data'
// 获取页面参数
const instance = Taro.getCurrentInstance()
......@@ -440,6 +441,13 @@ const getUserInfo = async () => {
// 设置身份信息
if (userInfo.name && userInfo.idcard) {
// 根据code值获取地区文字
const areaText = getAreaTextFromCodes(
userInfo.idcard_province || '',
userInfo.idcard_city || '',
userInfo.idcard_district || ''
)
identityInfo.value = {
userName: userInfo.name,
idCard: userInfo.idcard,
......@@ -448,9 +456,9 @@ const getUserInfo = async () => {
idcard_effect_begin: userInfo.idcard_effect_begin || '',
idcard_effect_end: userInfo.idcard_effect_end || '',
// 地址字段(用于显示的中文名称)
province: userInfo.province_name || '',
city: userInfo.city_name || '',
county: userInfo.county_name || userInfo.district_name || '',
province: areaText.province,
city: areaText.city,
county: areaText.county,
// 身份证地址字段(真实字段名)
idcard_province: userInfo.idcard_province || '',
idcard_city: userInfo.idcard_city || '',
......@@ -461,16 +469,17 @@ 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 || '',
county: userInfo.county_name || userInfo.district_name || '',
province: areaText.province,
city: areaText.city,
county: areaText.county,
province_code: userInfo.idcard_province,
city_code: userInfo.idcard_city,
county_code: userInfo.idcard_district,
detail_address: detailAddr,
idcard_address: detailAddr,
full_address: `${userInfo.province_name || ''}${userInfo.city_name || ''}${userInfo.county_name || userInfo.district_name || ''} ${detailAddr}`.trim()
full_address: `${areaText.province}${areaText.city}${areaText.county} ${detailAddr}`.trim()
};
}
}
......@@ -1141,6 +1150,66 @@ const addressData = ref({
})
/**
* 转换地区数据格式以适配NutUI Cascader组件
* @param {Array} data - element-china-area-data的原始数据
* @returns {Array} - 转换后的数据格式
*/
const transformAreaData = (data) => {
return data.map(item => ({
value: item.value,
text: item.label,
children: item.children ? transformAreaData(item.children) : undefined
}))
}
// 转换后的地区数据
const areaData = ref(transformAreaData(regionData))
/**
* 根据编码查找节点
* @param {Array} nodes - 节点数组
* @param {String} code - 编码
* @returns {Object|null} - 找到的节点或null
*/
const findNodeByCode = (nodes, code) => {
return nodes.find(node => node.value === code) || null
}
/**
* 根据省市县code值获取对应的文字
* @param {String} provinceCode - 省份代码
* @param {String} cityCode - 城市代码
* @param {String} countyCode - 县区代码
* @returns {Object} - 包含省市县文字的对象
*/
const getAreaTextFromCodes = (provinceCode, cityCode, countyCode) => {
const result = { province: '', city: '', county: '' }
if (provinceCode) {
const provinceNode = findNodeByCode(areaData.value, provinceCode)
if (provinceNode) {
result.province = provinceNode.text
if (cityCode && provinceNode.children) {
const cityNode = findNodeByCode(provinceNode.children, cityCode)
if (cityNode) {
result.city = cityNode.text
if (countyCode && cityNode.children) {
const countyNode = findNodeByCode(cityNode.children, countyCode)
if (countyNode) {
result.county = countyNode.text
}
}
}
}
}
}
return result
}
/**
* 地址变化处理回调
* @param {Object} address - 地址数据对象
*/
......