feat(collectionSettings): 根据地区编码获取地区文字显示
添加地区数据转换工具函数,将地区编码转换为对应的中文名称显示
Showing
1 changed file
with
76 additions
and
7 deletions
| ... | @@ -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 | */ | ... | ... |
-
Please register or login to post a comment