Forráskód Böngészése

修改地区查询

zs 8 hónapja
szülő
commit
88ca583825

+ 8 - 0
src/controller/system/region.controller.ts

@@ -67,6 +67,14 @@ export class RegionController implements BaseController {
     return result;
   }
 
+  @Get('/area')
+  async area() {
+    const list = await this.service.area(this.ctx.query);
+    const data = list.data;
+    const total = list.total;
+    return { data, total };
+  }
+
   @Get('/list')
   async list() {
     const list = await this.service.list(this.ctx.query);

+ 4 - 4
src/frame/BaseServiceV2.ts

@@ -49,9 +49,9 @@ export abstract class BaseServiceV2 {
   async query(query: object = {}, meta: any = {}, operas?) {
     let skip = get(meta, 'skip', 0);
     let limit = get(meta, 'limit', 0);
-    let order = get(meta, 'order', {});
-    let selects = get(meta, 'selects', []);
-    let builder = await this.model.createQueryBuilder();
+    const order = get(meta, 'order', {});
+    const selects = get(meta, 'selects', []);
+    const builder = await this.model.createQueryBuilder();
     if (selects.length > 0) {
       // 字段是直接传来的,正常限制,需要加上model的name.否则会导致什么字段都没有
       const modelName = this.model.metadata.name;
@@ -101,7 +101,7 @@ export abstract class BaseServiceV2 {
       const key = searchColumns[i];
       const value = query[key];
       /**该字段的查询方式 */
-      let opera = get(operas, key);
+      const opera = get(operas, key);
       /**builder的使用函数名 */
       let method = 'where';
       if (i === 0) method = 'where';

+ 31 - 0
src/service/system/region.service.ts

@@ -30,4 +30,35 @@ export class RegionService extends BaseServiceV2 {
     }
     return { data, total };
   }
+
+  // 地区列表
+  async area(query) {
+    const { skip = 0, limit = 0, level, code } = pick(query, ['skip', 'limit', 'level', 'code']);
+    const whereObject: any = { level, code };
+    const builder = this.model.createQueryBuilder().setFindOptions({ where: whereObject, skip, take: limit });
+    const data = await builder.getMany();
+    const total = await builder.getCount();
+    for (const val of data) {
+      if (get(val, 'code')) {
+        let level = get(val, 'level');
+        if (get(val, 'level') === 'province') level = 'city';
+        else if (get(val, 'level') === 'city') level = 'area';
+        else if (get(val, 'level') === 'area') level = 'street';
+        // 查询下一级
+        if (level === 'city') {
+          const cityList = await this.model.find({ where: { parent_code: Equal(val.code), level: Equal(level) } });
+          if (cityList && cityList.length > 0) {
+            for (const item of cityList) {
+              const areaList = await this.model.find({ where: { parent_code: Equal(item.code), level: Equal('area') } });
+              if (areaList && areaList.length > 0) {
+                Object.assign(item, { children: areaList });
+              }
+            }
+            Object.assign(val, { children: cityList });
+          }
+        }
+      }
+    }
+    return { data, total };
+  }
 }