Преглед изворни кода

fix(disability-module): 修复人才小程序个人信息页联系地址显示问题

- 修改 getPersonalInfo 方法,通过关联查询 areas 表将地区 id 转换为地区名称
- 修复前联系地址显示为 "1314"(id 拼接),修复后显示为 "山东省青岛市"
- 使用 Promise.all 并行查询省市区名称,提高性能

Co-Authored-By: Claude <noreply@anthropic.com>
yourname пре 1 недеља
родитељ
комит
8035402fcd

+ 38 - 5
allin-packages/disability-module/src/services/disabled-person.service.ts

@@ -711,6 +711,7 @@ export class DisabledPersonService extends GenericCrudService<DisabledPerson> {
   /**
    * 获取人才个人信息(用于人才小程序)
    * 直接返回数据库原始数据,日期字段由 schema 的 z.coerce.date() 自动处理
+   * 将 province/city/district 的 id 转换为地区名称
    */
   async getPersonalInfo(personId: number): Promise<any | null> {
     const person = await this.repository.findOne({
@@ -721,8 +722,40 @@ export class DisabledPersonService extends GenericCrudService<DisabledPerson> {
       return null;
     }
 
-    // 直接返回原始数据,不进行日期转换
-    // z.coerce.date() 会在 parseWithAwait 时自动处理 Date/string 转换
+    // 将地区 id 转换为地区名称 - 使用原始查询
+    let provinceName = person.province;
+    let cityName = person.city;
+    let districtName = person.district;
+
+    // 辅助函数:通过 id 查询地区名称
+    const getAreaName = async (idValue: string | null): Promise<string> => {
+      if (!idValue) return '';
+      const id = parseInt(idValue, 10);
+      if (isNaN(id)) return idValue;
+
+      try {
+        const result = await this.dataSource.query(
+          'SELECT name FROM areas WHERE id = $1 LIMIT 1',
+          [id]
+        );
+        return result && result.length > 0 ? result[0].name : idValue;
+      } catch {
+        return idValue;
+      }
+    };
+
+    // 并行查询省、市、区名称
+    const [province, city, district] = await Promise.all([
+      getAreaName(person.province),
+      getAreaName(person.city),
+      getAreaName(person.district)
+    ]);
+
+    provinceName = province;
+    cityName = city;
+    districtName = district;
+
+    // 返回数据,地区字段使用转换后的名称
     return {
       name: person.name,
       gender: person.gender,
@@ -731,9 +764,9 @@ export class DisabledPersonService extends GenericCrudService<DisabledPerson> {
       disabilityType: person.disabilityType,
       disabilityLevel: person.disabilityLevel,
       phone: person.phone,
-      province: person.province,
-      city: person.city,
-      district: person.district,
+      province: provinceName,
+      city: cityName,
+      district: districtName,
       detailedAddress: person.detailedAddress,
       birthDate: person.birthDate,
       idAddress: person.idAddress,

+ 3 - 0
pnpm-lock.yaml

@@ -376,6 +376,9 @@ importers:
       '@d8d/file-module':
         specifier: workspace:*
         version: link:../../packages/file-module
+      '@d8d/geo-areas':
+        specifier: workspace:*
+        version: link:../../packages/geo-areas
       '@d8d/shared-crud':
         specifier: workspace:*
         version: link:../../packages/shared-crud