hookehuyr

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

添加地区数据转换工具函数,将地区编码转换为对应的中文名称显示
...@@ -271,6 +271,7 @@ import { useUserStore } from '@/stores/user' ...@@ -271,6 +271,7 @@ import { useUserStore } from '@/stores/user'
271 271
272 // 导入地址选择组件 272 // 导入地址选择组件
273 import AddressSelector from '@/components/AddressSelector.vue' 273 import AddressSelector from '@/components/AddressSelector.vue'
274 +import { regionData } from 'element-china-area-data'
274 275
275 // 获取页面参数 276 // 获取页面参数
276 const instance = Taro.getCurrentInstance() 277 const instance = Taro.getCurrentInstance()
...@@ -440,6 +441,13 @@ const getUserInfo = async () => { ...@@ -440,6 +441,13 @@ const getUserInfo = async () => {
440 441
441 // 设置身份信息 442 // 设置身份信息
442 if (userInfo.name && userInfo.idcard) { 443 if (userInfo.name && userInfo.idcard) {
444 + // 根据code值获取地区文字
445 + const areaText = getAreaTextFromCodes(
446 + userInfo.idcard_province || '',
447 + userInfo.idcard_city || '',
448 + userInfo.idcard_district || ''
449 + )
450 +
443 identityInfo.value = { 451 identityInfo.value = {
444 userName: userInfo.name, 452 userName: userInfo.name,
445 idCard: userInfo.idcard, 453 idCard: userInfo.idcard,
...@@ -448,9 +456,9 @@ const getUserInfo = async () => { ...@@ -448,9 +456,9 @@ const getUserInfo = async () => {
448 idcard_effect_begin: userInfo.idcard_effect_begin || '', 456 idcard_effect_begin: userInfo.idcard_effect_begin || '',
449 idcard_effect_end: userInfo.idcard_effect_end || '', 457 idcard_effect_end: userInfo.idcard_effect_end || '',
450 // 地址字段(用于显示的中文名称) 458 // 地址字段(用于显示的中文名称)
451 - province: userInfo.province_name || '', 459 + province: areaText.province,
452 - city: userInfo.city_name || '', 460 + city: areaText.city,
453 - county: userInfo.county_name || userInfo.district_name || '', 461 + county: areaText.county,
454 // 身份证地址字段(真实字段名) 462 // 身份证地址字段(真实字段名)
455 idcard_province: userInfo.idcard_province || '', 463 idcard_province: userInfo.idcard_province || '',
456 idcard_city: userInfo.idcard_city || '', 464 idcard_city: userInfo.idcard_city || '',
...@@ -461,16 +469,17 @@ const getUserInfo = async () => { ...@@ -461,16 +469,17 @@ const getUserInfo = async () => {
461 // 同时更新地址选择器的数据,包含code值用于还原选中状态 469 // 同时更新地址选择器的数据,包含code值用于还原选中状态
462 if (userInfo.idcard_province && userInfo.idcard_city && userInfo.idcard_district) { 470 if (userInfo.idcard_province && userInfo.idcard_city && userInfo.idcard_district) {
463 const detailAddr = userInfo.idcard_address || '' 471 const detailAddr = userInfo.idcard_address || ''
472 +
464 addressData.value = { 473 addressData.value = {
465 - province: userInfo.province_name || '', 474 + province: areaText.province,
466 - city: userInfo.city_name || '', 475 + city: areaText.city,
467 - county: userInfo.county_name || userInfo.district_name || '', 476 + county: areaText.county,
468 province_code: userInfo.idcard_province, 477 province_code: userInfo.idcard_province,
469 city_code: userInfo.idcard_city, 478 city_code: userInfo.idcard_city,
470 county_code: userInfo.idcard_district, 479 county_code: userInfo.idcard_district,
471 detail_address: detailAddr, 480 detail_address: detailAddr,
472 idcard_address: detailAddr, 481 idcard_address: detailAddr,
473 - full_address: `${userInfo.province_name || ''}${userInfo.city_name || ''}${userInfo.county_name || userInfo.district_name || ''} ${detailAddr}`.trim() 482 + full_address: `${areaText.province}${areaText.city}${areaText.county} ${detailAddr}`.trim()
474 }; 483 };
475 } 484 }
476 } 485 }
...@@ -1141,6 +1150,66 @@ const addressData = ref({ ...@@ -1141,6 +1150,66 @@ const addressData = ref({
1141 }) 1150 })
1142 1151
1143 /** 1152 /**
1153 + * 转换地区数据格式以适配NutUI Cascader组件
1154 + * @param {Array} data - element-china-area-data的原始数据
1155 + * @returns {Array} - 转换后的数据格式
1156 + */
1157 +const transformAreaData = (data) => {
1158 + return data.map(item => ({
1159 + value: item.value,
1160 + text: item.label,
1161 + children: item.children ? transformAreaData(item.children) : undefined
1162 + }))
1163 +}
1164 +
1165 +// 转换后的地区数据
1166 +const areaData = ref(transformAreaData(regionData))
1167 +
1168 +/**
1169 + * 根据编码查找节点
1170 + * @param {Array} nodes - 节点数组
1171 + * @param {String} code - 编码
1172 + * @returns {Object|null} - 找到的节点或null
1173 + */
1174 +const findNodeByCode = (nodes, code) => {
1175 + return nodes.find(node => node.value === code) || null
1176 +}
1177 +
1178 +/**
1179 + * 根据省市县code值获取对应的文字
1180 + * @param {String} provinceCode - 省份代码
1181 + * @param {String} cityCode - 城市代码
1182 + * @param {String} countyCode - 县区代码
1183 + * @returns {Object} - 包含省市县文字的对象
1184 + */
1185 +const getAreaTextFromCodes = (provinceCode, cityCode, countyCode) => {
1186 + const result = { province: '', city: '', county: '' }
1187 +
1188 + if (provinceCode) {
1189 + const provinceNode = findNodeByCode(areaData.value, provinceCode)
1190 + if (provinceNode) {
1191 + result.province = provinceNode.text
1192 +
1193 + if (cityCode && provinceNode.children) {
1194 + const cityNode = findNodeByCode(provinceNode.children, cityCode)
1195 + if (cityNode) {
1196 + result.city = cityNode.text
1197 +
1198 + if (countyCode && cityNode.children) {
1199 + const countyNode = findNodeByCode(cityNode.children, countyCode)
1200 + if (countyNode) {
1201 + result.county = countyNode.text
1202 + }
1203 + }
1204 + }
1205 + }
1206 + }
1207 + }
1208 +
1209 + return result
1210 +}
1211 +
1212 +/**
1144 * 地址变化处理回调 1213 * 地址变化处理回调
1145 * @param {Object} address - 地址数据对象 1214 * @param {Object} address - 地址数据对象
1146 */ 1215 */
......