@jctrans/dw-sdk 1.0.1 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +513 -2
  2. package/dist/core/BaseQuery.js +1 -1
  3. package/dist/core/GraphQLClient.js +1 -1
  4. package/dist/generated/member/MemberManager.d.ts +48 -0
  5. package/dist/generated/member/MemberManager.js +1 -0
  6. package/dist/generated/member/MemberQuarterlyQuery.d.ts +64 -0
  7. package/dist/generated/member/MemberQuarterlyQuery.js +1 -0
  8. package/dist/generated/member/types.d.ts +94 -0
  9. package/dist/generated/member/types.js +1 -0
  10. package/dist/generated/opportunity/OpportunityEffectiveBoardQuery.js +1 -1
  11. package/dist/generated/opportunity/OpportunityManager.js +1 -1
  12. package/dist/generated/opportunity/types.js +1 -1
  13. package/dist/generated/platform/PlatformManager.d.ts +64 -0
  14. package/dist/generated/platform/PlatformManager.js +1 -0
  15. package/dist/generated/platform/PlatformPerformanceDeptUserQuery.d.ts +80 -0
  16. package/dist/generated/platform/PlatformPerformanceDeptUserQuery.js +1 -0
  17. package/dist/generated/platform/types.d.ts +146 -0
  18. package/dist/generated/platform/types.js +1 -0
  19. package/dist/generated/sales/CrmNewSigningQuery.d.ts +33 -0
  20. package/dist/generated/sales/CrmNewSigningQuery.js +1 -0
  21. package/dist/generated/sales/CrmRenewalDetailQuery.d.ts +33 -0
  22. package/dist/generated/sales/CrmRenewalDetailQuery.js +1 -0
  23. package/dist/generated/sales/CrmRenewalQuery.d.ts +33 -0
  24. package/dist/generated/sales/CrmRenewalQuery.js +1 -0
  25. package/dist/generated/sales/RenewalDetailQuery.d.ts +43 -0
  26. package/dist/generated/sales/RenewalDetailQuery.js +1 -0
  27. package/dist/generated/sales/SalesEventPerfQuery.d.ts +21 -0
  28. package/dist/generated/sales/SalesEventPerfQuery.js +1 -0
  29. package/dist/generated/sales/SalesManager.d.ts +94 -0
  30. package/dist/generated/sales/SalesManager.js +1 -0
  31. package/dist/generated/sales/SalesMemberPerfQuery.d.ts +21 -0
  32. package/dist/generated/sales/SalesMemberPerfQuery.js +1 -0
  33. package/dist/generated/sales/SalesTotalPerfQuery.d.ts +25 -0
  34. package/dist/generated/sales/SalesTotalPerfQuery.js +1 -0
  35. package/dist/generated/sales/types.d.ts +224 -0
  36. package/dist/generated/sales/types.js +1 -0
  37. package/dist/index.d.ts +14 -0
  38. package/dist/index.js +1 -1
  39. package/dist/services/opportunity/BoardService.js +1 -1
  40. package/dist/services/opportunity/types.js +1 -1
  41. package/dist/services/opportunity/validator.js +1 -1
  42. package/dist/services/platform/PlatformService.d.ts +83 -0
  43. package/dist/services/platform/PlatformService.js +1 -0
  44. package/dist/services/sales/SalesService.d.ts +106 -0
  45. package/dist/services/sales/SalesService.js +1 -0
  46. package/package.json +12 -12
package/README.md CHANGED
@@ -83,6 +83,117 @@ if (res.success) {
83
83
  }
84
84
  ```
85
85
 
86
+ ### SalesService — 销售域封装 API
87
+
88
+ 销售域提供总业绩、会员业绩、会议业绩、续费明细和 CRM 数据分析看板查询,共用一个入参结构。
89
+
90
+ ```ts
91
+ import { createDwSdk } from '@jctrans/dw-sdk'
92
+
93
+ const sdk = createDwSdk({ baseUrl: 'https://api.jctrans.net.cn' })
94
+
95
+ // 总业绩看板
96
+ const total = await sdk.sales.service.salesTotalPerf({
97
+ deptId: 100,
98
+ performanceMonth: '2026-06',
99
+ })
100
+
101
+ // 会员业绩看板
102
+ const member = await sdk.sales.service.salesMemberPerf({
103
+ deptId: 100,
104
+ })
105
+
106
+ // 会议业绩看板
107
+ const event = await sdk.sales.service.salesEventPerf({
108
+ deptId: 100,
109
+ monthFilterMode: 'QUARTER',
110
+ })
111
+
112
+ // 续费明细
113
+ const detail = await sdk.sales.service.renewalDetail({
114
+ userId: 100,
115
+ performanceMonth: '2026-06',
116
+ })
117
+
118
+ // CRM 新签观测
119
+ const newSigning = await sdk.sales.service.crmNewSigning({
120
+ deptId: 100,
121
+ statMonth: '2026-06',
122
+ })
123
+
124
+ // CRM 续费观测
125
+ const renewal = await sdk.sales.service.crmRenewal({
126
+ deptId: 100,
127
+ statMonth: '2026-06',
128
+ })
129
+
130
+ // CRM 续费观测详情
131
+ const renewalDetail = await sdk.sales.service.crmRenewalDetail({
132
+ deptId: 100,
133
+ statMonth: '2026-06',
134
+ })
135
+
136
+ if (total.success) {
137
+ // total.data.totalPerf, total.data.deptGroupList, total.data.userGroupList
138
+ console.log('总业绩:', total.data.totalPerf)
139
+ }
140
+
141
+ if (detail.success) {
142
+ console.log(`续费明细 ${detail.data.length} 条`)
143
+ }
144
+ ```
145
+
146
+ ### 客户域 — 季度综合报告
147
+
148
+ ```ts
149
+ import { createDwSdk } from '@jctrans/dw-sdk'
150
+
151
+ const sdk = createDwSdk({ baseUrl: 'https://api.jctrans.net.cn' })
152
+
153
+ // 客户季度综合报告
154
+ const report = await sdk.member.memberQuarterly()
155
+ .select('companyId', 'year', 'quarter', 'companyNameCn', 'selfReleaseCount')
156
+ .arg('companyId', 12345)
157
+ .arg('year', 2026)
158
+ .arg('quarter', 2)
159
+ .arg('subTypes', ['interaction', 'account'])
160
+ .query()
161
+
162
+ // report: MemberQuarterlyVo
163
+ // report.interactionList — 互动排名子表
164
+ // report.accountList — 账号使用明细子表
165
+ ```
166
+
167
+ ### CRM 数据分析看板
168
+
169
+ ```ts
170
+ import { createDwSdk } from '@jctrans/dw-sdk'
171
+
172
+ const sdk = createDwSdk({ baseUrl: 'https://api.jctrans.net.cn' })
173
+
174
+ // CRM 新签观测
175
+ const newSigning = await sdk.sales.crmNewSigning()
176
+ .arg('deptId', 100)
177
+ .arg('statMonth', '2026-06')
178
+ .query()
179
+
180
+ // CRM 续费观测
181
+ const renewal = await sdk.sales.crmRenewal()
182
+ .arg('deptId', 100)
183
+ .arg('statMonth', '2026-06')
184
+ .query()
185
+
186
+ // CRM 续费观测详情
187
+ const renewalDetail = await sdk.sales.crmRenewalDetail()
188
+ .arg('deptId', 100)
189
+ .arg('statMonth', '2026-06')
190
+ .query()
191
+
192
+ // newSigning: CrmDashboardNewSigningVo[]
193
+ // renewal: CrmDashboardRenewalVo[]
194
+ // renewalDetail: CrmDashboardRenewalDetailVo[]
195
+ ```
196
+
86
197
  ## 基础用例
87
198
 
88
199
  ### 1. 全字段分页查询
@@ -174,6 +285,126 @@ const graphQL = sdk.opportunity.opportunityEffectiveBoardPage()
174
285
  // ) { total current size pages records { companyId periodType inquiryCount } } }
175
286
  ```
176
287
 
288
+ ## 销售域用例
289
+
290
+ ### 7. 总业绩看板查询(底层 Query Builder)
291
+
292
+ ```ts
293
+ const total = await sdk.sales.salesTotalPerf()
294
+ .arg('deptId', 100)
295
+ .arg('performanceMonth', '2026-06')
296
+ .query()
297
+
298
+ // total: SalesTotalPerfBoardVo
299
+ // total.totalPerf — 单条总业绩
300
+ // total.deptGroupList — 部门分组列表
301
+ // total.userGroupList — 用户分组列表
302
+ ```
303
+
304
+ ### 8. 会员业绩看板查询(底层 Query Builder)
305
+
306
+ ```ts
307
+ const member = await sdk.sales.salesMemberPerf()
308
+ .arg('deptId', 100)
309
+ .query()
310
+
311
+ // member: SalesMemberPerfBoardVo
312
+ // member.totalMemberPerf — 总会员业绩
313
+ // member.newSigningPerf — 新签业绩
314
+ // member.reSigningPerf — 续签业绩
315
+ // member.jcvfPerf — 金诚运营基金业绩
316
+ // member.groupList — 分组列表
317
+ ```
318
+
319
+ ### 9. 会议业绩看板查询(底层 Query Builder)
320
+
321
+ ```ts
322
+ const event = await sdk.sales.salesEventPerf()
323
+ .arg('deptId', 100)
324
+ .arg('monthFilterMode', 'QUARTER')
325
+ .query()
326
+
327
+ // event: SalesEventPerfBoardVo
328
+ // event.sessionPerfList — 会议场次业绩列表
329
+ // event.productBarList — 产品条列表
330
+ // event.groupList — 分组列表
331
+ ```
332
+
333
+ ### 10. 带市场区域和预测查询
334
+
335
+ ```ts
336
+ const total = await sdk.sales.salesTotalPerf()
337
+ .arg('deptId', 100)
338
+ .arg('marketArea', '0') // 0=国内, 1=海外
339
+ .arg('forecastEnabled', true)
340
+ .arg('performanceMonth', '2026-06')
341
+ .query()
342
+ ```
343
+
344
+ ### 11. 续费明细查询(底层 Query Builder)
345
+
346
+ ```ts
347
+ const detail = await sdk.sales.renewalDetail()
348
+ .arg('userId', 100)
349
+ .arg('performanceMonth', '2026-06')
350
+ .query()
351
+
352
+ // detail: RenewalDetailVo[]
353
+ // detail[0].normalAmountRmb, detail[0].receiptTotalAmountRmb, detail[0].completionRate, ...
354
+ ```
355
+
356
+ ### 12. CRM 新签观测(底层 Query Builder)
357
+
358
+ ```ts
359
+ const list = await sdk.sales.crmNewSigning()
360
+ .arg('deptId', 100)
361
+ .arg('statMonth', '2026-06')
362
+ .query()
363
+
364
+ // list: CrmDashboardNewSigningVo[]
365
+ // list[0].newSigningCount, list[0].firstSigningCount, list[0].addOnSigningCount, ...
366
+ ```
367
+
368
+ ### 13. CRM 续费观测(底层 Query Builder)
369
+
370
+ ```ts
371
+ const list = await sdk.sales.crmRenewal()
372
+ .arg('deptId', 100)
373
+ .arg('statMonth', '2026-06')
374
+ .query()
375
+
376
+ // list: CrmDashboardRenewalVo[]
377
+ // list[0].renewalRate, list[0].renewedProductCount, list[0].unrenewedProductCount, ...
378
+ ```
379
+
380
+ ### 14. CRM 续费观测详情(底层 Query Builder)
381
+
382
+ ```ts
383
+ const list = await sdk.sales.crmRenewalDetail()
384
+ .arg('deptId', 100)
385
+ .arg('statMonth', '2026-06')
386
+ .query()
387
+
388
+ // list: CrmDashboardRenewalDetailVo[]
389
+ // list[0].customerName, list[0].expireProductName, list[0].renewalStatus, ...
390
+ ```
391
+
392
+ ### 15. 调试:查看销售域 GraphQL payload
393
+
394
+ ```ts
395
+ const graphQL = sdk.sales.salesTotalPerf()
396
+ .arg('deptId', 100)
397
+ .arg('performanceMonth', '2026-06')
398
+ .toGraphQL()
399
+
400
+ // 输出:
401
+ // query { salesTotalPerf(input: { deptId: 100, performanceMonth: "2026-06" }) {
402
+ // totalPerf { queryDim performanceMonth deptId deptName ... }
403
+ // deptGroupList { queryDim performanceMonth ... }
404
+ // userGroupList { queryDim userId userName ... }
405
+ // } }
406
+ ```
407
+
177
408
  ## 封装 API 用例(sdk.opportunity.board)
178
409
 
179
410
  封装 API 提供 `{ success, data, error }` 统一返回结构,参数校验失败不抛异常,前端可直接展示 `error` 字段。
@@ -343,6 +574,151 @@ interface BoardQueryResult {
343
574
  | `YEAR` | `.eq('periodType', 'year')` + `.arg('statYear', YYYY)` |
344
575
  | `MONTH` | `.eq('periodType', 'month')` + `.eq('statMonth', N)` + `.arg('statYear', YYYY)` |
345
576
 
577
+ ### SalesService(封装层)
578
+
579
+ 通过 `sdk.sales.service` 访问,提供四个查询。
580
+
581
+ #### 共用入参 `SalesServiceParams`
582
+
583
+ | 参数 | 类型 | 必填 | 说明 |
584
+ |------|------|------|------|
585
+ | `params.deptId` | `number \| null` | ❌ | 部门 ID |
586
+ | `params.userId` | `number \| null` | ❌ | 用户 ID |
587
+ | `params.performanceMonth` | `string \| null` | ❌ | 业绩月份,格式 `YYYY-MM`(如 `2026-06`) |
588
+ | `params.forecastEnabled` | `boolean \| null` | ❌ | 是否启用预测 |
589
+ | `params.marketArea` | `string \| null` | ❌ | 市场区域 |
590
+ | `params.monthFilterMode` | `string \| null` | ❌ | 月份筛选模式(仅 `salesEventPerf` 使用) |
591
+
592
+ #### service.salesTotalPerf(params)
593
+
594
+ **返回值:`Promise<SalesTotalPerfResult>`**
595
+
596
+ ```ts
597
+ interface SalesTotalPerfResult {
598
+ success: boolean
599
+ data: SalesTotalPerfBoardVo | null
600
+ error: string | null
601
+ }
602
+
603
+ // SalesTotalPerfBoardVo:
604
+ // totalPerf: SalesDeptPerfVo
605
+ // deptGroupList: SalesDeptPerfVo[]
606
+ // userGroupList: SalesUserPerfVo[]
607
+ ```
608
+
609
+ #### service.salesMemberPerf(params)
610
+
611
+ **返回值:`Promise<SalesMemberPerfResult>`**
612
+
613
+ ```ts
614
+ interface SalesMemberPerfResult {
615
+ success: boolean
616
+ data: SalesMemberPerfBoardVo | null
617
+ error: string | null
618
+ }
619
+
620
+ // SalesMemberPerfBoardVo:
621
+ // totalMemberPerf: SalesPerfMemberDashboardVo
622
+ // newSigningPerf: SalesPerfMemberDashboardVo
623
+ // reSigningPerf: SalesPerfMemberDashboardVo
624
+ // jcvfPerf: SalesPerfMemberDashboardVo
625
+ // groupList: SalesPerfMemberDashboardVo[]
626
+ ```
627
+
628
+ #### service.salesEventPerf(params)
629
+
630
+ **返回值:`Promise<SalesEventPerfResult>`**
631
+
632
+ ```ts
633
+ interface SalesEventPerfResult {
634
+ success: boolean
635
+ data: SalesEventPerfBoardVo | null
636
+ error: string | null
637
+ }
638
+
639
+ // SalesEventPerfBoardVo:
640
+ // sessionPerfList: SalesPerfEventDashboardVo[]
641
+ // productBarList: SalesPerfEventDashboardVo[]
642
+ // groupList: SalesPerfEventDashboardVo[]
643
+ ```
644
+
645
+ #### service.renewalDetail(params)
646
+
647
+ **返回值:`Promise<RenewalDetailResult>`**
648
+
649
+ ```ts
650
+ interface RenewalDetailResult {
651
+ success: boolean
652
+ data: RenewalDetailVo[] | null
653
+ error: string | null
654
+ }
655
+ ```
656
+
657
+ **RenewalDetailVo 关键字段:**
658
+
659
+ | 字段 | 类型 | 说明 |
660
+ |------|------|------|
661
+ | `normalAmountRmb` | `number` | 正常收款金额(人民币) |
662
+ | `overdraftAmountRmb` | `number` | 透支金额 |
663
+ | `recoveredAmountRmb` | `number` | 回收金额 |
664
+ | `receiptTotalAmountRmb` | `number` | 收款总金额 |
665
+ | `targetAmount` | `number` | 目标金额 |
666
+ | `completionRate` | `number` | 完成率 |
667
+ | `receiptAmountRmb` | `number` | 收款金额(人民币) |
668
+ | `targetAmount` | `number` | 目标金额 |
669
+ | `completionRate` | `number` | 完成率 |
670
+ | `receiptAmountRmb` | `number` | 收款金额(人民币) |
671
+ | `targetAmount` | `number` | 目标金额 |
672
+ | `completionRate` | `number` | 完成率 |
673
+
674
+ #### service.crmNewSigning(params)
675
+
676
+ **入参:`CrmDashboardParams`**
677
+
678
+ | 参数 | 类型 | 必填 | 说明 |
679
+ |------|------|------|------|
680
+ | `params.deptId` | `number \| null` | ❌ | 部门 ID |
681
+ | `params.userId` | `number \| null` | ❌ | 用户 ID |
682
+ | `params.statMonth` | `string \| null` | ❌ | 统计月份,格式 `YYYY-MM`(如 `2026-06`) |
683
+
684
+ **返回值:`Promise<CrmNewSigningResult>`**
685
+
686
+ ```ts
687
+ interface CrmNewSigningResult {
688
+ success: boolean
689
+ data: CrmDashboardNewSigningVo[] | null
690
+ error: string | null
691
+ }
692
+ ```
693
+
694
+ #### service.crmRenewal(params)
695
+
696
+ 入参与 `crmNewSigning` 相同(`CrmDashboardParams`)。
697
+
698
+ **返回值:`Promise<CrmRenewalResult>`**
699
+
700
+ ```ts
701
+ interface CrmRenewalResult {
702
+ success: boolean
703
+ data: CrmDashboardRenewalVo[] | null
704
+ error: string | null
705
+ }
706
+ ```
707
+
708
+ #### service.crmRenewalDetail(params)
709
+
710
+ 入参与 `crmNewSigning` 相同(`CrmDashboardParams`)。
711
+
712
+ **返回值:`Promise<CrmRenewalDetailResult>`**
713
+
714
+ ```ts
715
+ interface CrmRenewalDetailResult {
716
+ success: boolean
717
+ data: CrmDashboardRenewalDetailVo[] | null
718
+ error: string | null
719
+ }
720
+ ```
721
+
346
722
  ## 与 Java 后端对齐
347
723
 
348
724
  SDK 与 `jctrans-data-service` 的 Java 代码完全对齐。
@@ -358,6 +734,15 @@ POST {baseUrl}/api/{domain}/{topic}/graphql
358
734
  | domain | topic | 完整 URL |
359
735
  |--------|-------|---------|
360
736
  | `opportunity` | `opportunityEffectiveBoardPage` | `/api/opportunity/opportunityEffectiveBoardPage/graphql` |
737
+ | `platform` | `platformPerformanceDeptUserPage` | `/api/platform/platformPerformanceDeptUserPage/graphql` |
738
+ | `sales` | `salesTotalPerf` | `/api/sales/graphql` |
739
+ | `sales` | `salesMemberPerf` | `/api/sales/graphql` |
740
+ | `sales` | `salesEventPerf` | `/api/sales/graphql` |
741
+ | `sales` | `renewalDetail` | `/api/sales/graphql` |
742
+ | `sales` | `crmNewSigning` | `/api/sales/graphql` |
743
+ | `sales` | `crmRenewal` | `/api/sales/graphql` |
744
+ | `sales` | `crmRenewalDetail` | `/api/sales/graphql` |
745
+ | `member` | `memberQuarterly` | `/api/member/memberQuarterly/graphql` |
361
746
 
362
747
  这种设计使得浏览器 DevTools → Network 面板可按路径分类筛选,便于调试。
363
748
 
@@ -390,7 +775,7 @@ Response: {"data": {"opportunityEffectiveBoardPage": {"total": ..., "records": [
390
775
 
391
776
  ### query 结构
392
777
 
393
- 产出的 GraphQL query 与后端 `opportunity.graphqls` schema 对齐:
778
+ opportunity 域产出的 GraphQL query 与后端 `opportunity.graphqls` schema 对齐(dto 入参模式):
394
779
 
395
780
  ```
396
781
  query { topic(dto: { current: N, size: N, companyId: N, statYear: N, ... })
@@ -400,6 +785,33 @@ query { topic(dto: { current: N, size: N, companyId: N, statYear: N, ... })
400
785
  > **注意**:`eq` 条件中匹配 DTO 字段(`companyId`/`statYear`/`statMonth`/`statQuarter`)的会提取到 `dto` 入参中,
401
786
  > 非 DTO 字段或非 `eq` 操作符的条件仍以 `conditions` 数组方式传递。
402
787
 
788
+ sales 域产出的 GraphQL query 与后端 `sales.graphqls` schema 对齐(input 入参模式,v2 拆分版):
789
+
790
+ ```
791
+ query { salesTotalPerf(input: { deptId: N, performanceMonth: "2026-06", ... })
792
+ { totalPerf { fields } deptGroupList { fields } userGroupList { fields } } }
793
+
794
+ query { salesMemberPerf(input: { deptId: N, ... })
795
+ { totalMemberPerf { fields } newSigningPerf { fields } reSigningPerf { fields } jcvfPerf { fields } groupList { fields } } }
796
+
797
+ query { salesEventPerf(input: { deptId: N, monthFilterMode: "QUARTER", ... })
798
+ { sessionPerfList { fields } productBarList { fields } groupList { fields } } }
799
+
800
+ query { renewalDetail(input: { userId: N, ... })
801
+ { queryDim userId userName deptId normalAmountRmb ... } }
802
+
803
+ query { crmNewSigning(input: { deptId: N, statMonth: "2026-06", ... })
804
+ { queryDim userId userName deptId newSigningCount firstSigningCount ... } }
805
+
806
+ query { crmRenewal(input: { deptId: N, statMonth: "2026-06", ... })
807
+ { queryDim userId userName deptId renewalRate renewedProductCount ... } }
808
+
809
+ query { crmRenewalDetail(input: { deptId: N, statMonth: "2026-06", ... })
810
+ { statMonth deptId customerName expireProductName renewalStatus ... } }
811
+ ```
812
+
813
+ > sales 域查询无分页、无 select,返回固定结构。`arg()` 参数直接映射到 `input` 对象,`null`/`undefined`/空字符串自动跳过。
814
+
403
815
  ## SSR 使用指南
404
816
 
405
817
  ### Nuxt 3 Server API
@@ -502,11 +914,28 @@ export function useOpportunity() {
502
914
  │ ├── GraphQLClient (fetch 封装) │
503
915
  │ │ POST {baseUrl}/api/{domain}/{topic}/graphql │
504
916
  │ │ ├── /api/opportunity/opportunityEffectiveBoardPage/graphql │
917
+ │ │ ├── /api/platform/platformPerformanceDeptUserPage/graphql │
918
+ │ │ ├── /api/sales/graphql │
919
+ │ │ ├── /api/member/memberQuarterly/graphql │
505
920
  │ │ ├── /api/order/adsOrderPage/graphql (待生成) │
506
921
  │ │ └── /api/logistics/... (待生成) │
507
922
  │ ├── OpportunityManager (商机域) │
508
923
  │ │ ├── opportunityEffectiveBoardPage() → Query Builder │
509
924
  │ │ └── board (getter) → BoardService (封装层) │
925
+ │ ├── SalesManager (销售域) │
926
+ │ │ ├── salesTotalPerf() → SalesTotalPerfQuery │
927
+ │ │ ├── salesMemberPerf() → SalesMemberPerfQuery │
928
+ │ │ ├── salesEventPerf() → SalesEventPerfQuery │
929
+ │ │ ├── renewalDetail() → RenewalDetailQuery │
930
+ │ │ ├── crmNewSigning() → CrmNewSigningQuery │
931
+ │ │ ├── crmRenewal() → CrmRenewalQuery │
932
+ │ │ ├── crmRenewalDetail() → CrmRenewalDetailQuery │
933
+ │ │ └── service (getter) → SalesService (封装层) │
934
+ │ ├── MemberManager (客户域) │
935
+ │ │ └── memberQuarterly() → MemberQuarterlyQuery │
936
+ │ ├── PlatformManager (公共支撑域) │
937
+ │ │ ├── platformPerformanceDeptUserPage() → Query Builder │
938
+ │ │ └── service (getter) → PlatformService (封装层) │
510
939
  │ ├── OrderManager (订单域, 待生成) │
511
940
  │ └── LogisticsManager (物流域, 待生成) │
512
941
  └──────────────────────────────────────────────────────────────────┘
@@ -530,6 +959,26 @@ createDwSdk()
530
959
  → sdk.opportunity.opportunityEffectiveBoardPage() // OpportunityEffectiveBoardQuery
531
960
  → .query() // Promise<OpportunityEffectiveBoardPageResponse>
532
961
  → result.records // OpportunityEffectiveBoard[]
962
+ → sdk.sales // SalesManager
963
+ → sdk.sales.salesTotalPerf() // SalesTotalPerfQuery
964
+ → .query() // Promise<SalesTotalPerfBoardVo>
965
+ → result.totalPerf // SalesDeptPerfVo
966
+ → sdk.sales.salesMemberPerf() // SalesMemberPerfQuery
967
+ → .query() // Promise<SalesMemberPerfBoardVo>
968
+ → sdk.sales.salesEventPerf() // SalesEventPerfQuery
969
+ → .query() // Promise<SalesEventPerfBoardVo>
970
+ → sdk.sales.renewalDetail() // RenewalDetailQuery
971
+ → .query() // Promise<RenewalDetailVo[]>
972
+ → sdk.sales.crmNewSigning() // CrmNewSigningQuery
973
+ → .query() // Promise<CrmDashboardNewSigningVo[]>
974
+ → sdk.sales.crmRenewal() // CrmRenewalQuery
975
+ → .query() // Promise<CrmDashboardRenewalVo[]>
976
+ → sdk.sales.crmRenewalDetail() // CrmRenewalDetailQuery
977
+ → .query() // Promise<CrmDashboardRenewalDetailVo[]>
978
+ → sdk.member // MemberManager
979
+ → sdk.member.memberQuarterly() // MemberQuarterlyQuery
980
+ → .query() // Promise<MemberQuarterlyVo>
981
+ → result.interactionList // MemberQuarterlyInteractionRankingVo[]
533
982
  ```
534
983
 
535
984
  字段名通过 `keyof` 联合类型约束,IDE 自动补全:
@@ -543,7 +992,7 @@ createDwSdk()
543
992
  ### 当前前端可补全能力
544
993
 
545
994
  ```ts
546
- . // 可补全: opportunity
995
+ . // 可补全: opportunity, platform, sales, member
547
996
  sdk.opportunity
548
997
  .opportunityEffectiveBoardPage()
549
998
  // 可链式补全: select / arg / eq / ne / gt / ge / lt / le
@@ -551,6 +1000,40 @@ sdk.opportunity
551
1000
  .board
552
1001
  // BoardService: .query({ compId, dateType, dateValue })
553
1002
  // 返回 BoardQueryResult: { success, data, error }
1003
+ sdk.platform
1004
+ .platformPerformanceDeptUserPage()
1005
+ // 可链式补全: select / arg / eq / ne / gt / ge / lt / le
1006
+ // / like / in / isNull / isNotNull / page / query / toGraphQL
1007
+ .service
1008
+ // PlatformService: .query({ queryDim, deptId, ... })
1009
+ sdk.sales
1010
+ .salesTotalPerf()
1011
+ // 可链式补全: arg / query / toGraphQL
1012
+ // 返回 Promise<SalesTotalPerfBoardVo>
1013
+ .salesMemberPerf()
1014
+ // 可链式补全: arg / query / toGraphQL
1015
+ // 返回 Promise<SalesMemberPerfBoardVo>
1016
+ .salesEventPerf()
1017
+ // 可链式补全: arg / query / toGraphQL
1018
+ // 返回 Promise<SalesEventPerfBoardVo>
1019
+ .renewalDetail()
1020
+ // 可链式补全: arg / query / toGraphQL
1021
+ // 返回 Promise<RenewalDetailVo[]>
1022
+ .crmNewSigning()
1023
+ // 可链式补全: arg / query / toGraphQL
1024
+ // 返回 Promise<CrmDashboardNewSigningVo[]>
1025
+ .crmRenewal()
1026
+ // 可链式补全: arg / query / toGraphQL
1027
+ // 返回 Promise<CrmDashboardRenewalVo[]>
1028
+ .crmRenewalDetail()
1029
+ // 可链式补全: arg / query / toGraphQL
1030
+ // 返回 Promise<CrmDashboardRenewalDetailVo[]>
1031
+ .service
1032
+ // SalesService: .salesTotalPerf(params) / .salesMemberPerf(params) / .salesEventPerf(params) / .renewalDetail(params)
1033
+ sdk.member
1034
+ .memberQuarterly()
1035
+ // 可链式补全: select / arg / query / toGraphQL
1036
+ // 返回 Promise<MemberQuarterlyVo>
554
1037
  ```
555
1038
 
556
1039
  ### 封装层导出类型
@@ -562,6 +1045,34 @@ import type {
562
1045
  BoardQueryResult, // { success: boolean; data: BoardPageData | null; error: string | null }
563
1046
  BoardPageData, // { total; current; size; pages; records }
564
1047
  } from '@jctrans/dw-sdk'
1048
+
1049
+ // 销售域
1050
+ import type {
1051
+ SalesInput, // { deptId?, userId?, performanceMonth?, forecastEnabled?, marketArea?, monthFilterMode? }
1052
+ SalesTotalPerfBoardVo, // { totalPerf, deptGroupList, userGroupList }
1053
+ SalesMemberPerfBoardVo,// { totalMemberPerf, newSigningPerf, reSigningPerf, jcvfPerf, groupList }
1054
+ SalesEventPerfBoardVo, // { sessionPerfList, productBarList, groupList }
1055
+ RenewalDetailVo, // { normalAmountRmb, overdraftAmountRmb, recoveredAmountRmb, receiptTotalAmountRmb, ... }
1056
+ SalesServiceParams, // 入参类型
1057
+ SalesTotalPerfResult, // { success, data, error }
1058
+ SalesMemberPerfResult, // { success, data, error }
1059
+ SalesEventPerfResult, // { success, data, error }
1060
+ RenewalDetailResult, // { success, data, error }
1061
+ } from '@jctrans/dw-sdk'
1062
+
1063
+ // CRM 数据分析看板
1064
+ import type {
1065
+ CrmDashboardNewSigningVo, // { newSigningCount, firstSigningCount, addOnSigningCount, ... }
1066
+ CrmDashboardRenewalVo, // { renewalRate, renewedProductCount, unrenewedProductCount, ... }
1067
+ CrmDashboardRenewalDetailVo, // { customerName, expireProductName, renewalStatus, ... }
1068
+ } from '@jctrans/dw-sdk'
1069
+
1070
+ // 客户域
1071
+ import type {
1072
+ MemberQuarterlyVo, // { companyNameCn, interactionList, accountList, ... }
1073
+ MemberQuarterlyInput, // { companyId, year, quarter, subTypes? }
1074
+ MemberQuarterlyField, // keyof MemberQuarterlyVo
1075
+ } from '@jctrans/dw-sdk'
565
1076
  ```
566
1077
 
567
1078
  ### 如何让前端都"点得出来"新能力
@@ -1 +1 @@
1
- function a0_0x4366(){const _0x5a3b3e=['uvrxEva','BgLRzq','oduWngncCKLpuG','EwjLDhq','BNvSBa','y2XPzw50','ywrKq29UzgL0Aw9U','C2vHCMnO','iIWGzMLLBgq6ici','CMvWBgfJzq','mJaWz3zLtKTO','y29UzgL0Aw9UCZOG','DMH4the','ChvZAa','mtG4mdDyEejbyMy','AxnfBxb0EvzHBhvL','ntG2nta4s2PzzwHp','B3bLCMf0B3i','qLHOv3u','yM9VBgvHBG','mtmWmZiWtxP0D3rf','BgvUz3rO','BNvTyMvY','CgfNzu51Bq','Dg9WAwm','AxnoDwXS','Dg9hCMfWAffm','CgfNzq','AxnbCNjHEq','zMfSC2u','y29TCgfUEuLK','C2vYAwfSAxPLvMfSDwu','y29UzgL0Aw9UCW','zg9TywLU','C2vSzwn0','swPqz0W','C2vSzwn0rMLLBgrZ','mta1nuDIsfbxEa','mZrVA0fWDu8','uuPSrKq','ih0GFsb9','Dg9tDhjPBMC','CgfNzvnPEMu','q09evfu','yNvPBgrdB25KAxrPB25ZtgL0zxjHBa','mJm0mtq0mevmEeXiqq','yxjN','ywXSrMLLBgrZ','yNvPBgrhCMfWAffm','oduXnJKZmezgB3zXzW','Dg9fBMrWB2LUDa','BNjgqMm','AM9PBG','iIWGDMfSDwu6ia','E29WzxjHDg9YoIaI','AxnoB3roDwXS','BwfW','s1LWsLi','kcGOlISPkYKRksSK','DMfSDwu','yxbWBhK','zw50CMLLCW','ntq1ode1owftuhr4yq','zxH0CMfbCMDZ'];a0_0x4366=function(){return _0x5a3b3e;};return a0_0x4366();}const a0_0x3be1f5=a0_0x4c51;function a0_0x4c51(_0x87c391,_0xea9d5c){_0x87c391=_0x87c391-0xb2;const _0x1dc067=a0_0x4366();let _0x171ba7=_0x1dc067[_0x87c391];if(a0_0x4c51['sLnDGj']===undefined){var _0x1c585c=function(_0x5357ba){const _0x441b74='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4e0f5a='',_0x36368e='',_0x557757=_0x4e0f5a+_0x1c585c,_0x369100=(''+function(){return 0x0;})['indexOf']('\x0a')!==-0x1;for(let _0x155764=0x0,_0x453204,_0x455926,_0x14eae2=0x0;_0x455926=_0x5357ba['charAt'](_0x14eae2++);~_0x455926&&(_0x453204=_0x155764%0x4?_0x453204*0x40+_0x455926:_0x455926,_0x155764++%0x4)?_0x4e0f5a+=_0x369100||_0x557757['charCodeAt'](_0x14eae2+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x453204>>(-0x2*_0x155764&0x6)):_0x155764:0x0){_0x455926=_0x441b74['indexOf'](_0x455926);}for(let _0x147c6b=0x0,_0x293726=_0x4e0f5a['length'];_0x147c6b<_0x293726;_0x147c6b++){_0x36368e+='%'+('00'+_0x4e0f5a['charCodeAt'](_0x147c6b)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x36368e);};a0_0x4c51['TiruFl']=_0x1c585c,a0_0x4c51['tKsrXj']={},a0_0x4c51['sLnDGj']=!![];}const _0x436677=_0x1dc067[0x0],_0x4c5101=_0x87c391+_0x436677,_0x17b93c=a0_0x4c51['tKsrXj'][_0x4c5101];if(!_0x17b93c){const _0x15fdd0=function(_0x52b721){this['WVTHOQ']=_0x52b721,this['EhaKvb']=[0x1,0x0,0x0],this['wJXBBh']=function(){return'newState';},this['OHDjNm']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['qffMMX']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x15fdd0['prototype']['UfkPqU']=function(){const _0x5848b0=new RegExp(this['OHDjNm']+this['qffMMX']),_0x38e1e1=_0x5848b0['test'](this['wJXBBh']['toString']())?--this['EhaKvb'][0x1]:--this['EhaKvb'][0x0];return this['MZoMGa'](_0x38e1e1);},_0x15fdd0['prototype']['MZoMGa']=function(_0x2a29ec){if(!Boolean(~_0x2a29ec))return _0x2a29ec;return this['qgalRw'](this['WVTHOQ']);},_0x15fdd0['prototype']['qgalRw']=function(_0x2d2247){for(let _0x509f22=0x0,_0x14d755=this['EhaKvb']['length'];_0x509f22<_0x14d755;_0x509f22++){this['EhaKvb']['push'](Math['round'](Math['random']())),_0x14d755=this['EhaKvb']['length'];}return _0x2d2247(this['EhaKvb'][0x0]);},(''+function(){return 0x0;})['indexOf']('\x0a')===-0x1&&new _0x15fdd0(a0_0x4c51)['UfkPqU'](),_0x171ba7=a0_0x4c51['TiruFl'](_0x171ba7),a0_0x4c51['tKsrXj'][_0x4c5101]=_0x171ba7;}else _0x171ba7=_0x17b93c;return _0x171ba7;}(function(_0x256b85,_0x16a928){const _0x3f66bc=a0_0x4c51,_0x5d52b6=_0x256b85();while(!![]){try{const _0x23a134=-parseInt(_0x3f66bc(0xdf))/0x1+parseInt(_0x3f66bc(0xb5))/0x2*(-parseInt(_0x3f66bc(0xdd))/0x3)+parseInt(_0x3f66bc(0xd1))/0x4*(-parseInt(_0x3f66bc(0xb4))/0x5)+-parseInt(_0x3f66bc(0xbc))/0x6+parseInt(_0x3f66bc(0xcd))/0x7+parseInt(_0x3f66bc(0xd9))/0x8*(parseInt(_0x3f66bc(0xe3))/0x9)+parseInt(_0x3f66bc(0xc0))/0xa;if(_0x23a134===_0x16a928)break;else _0x5d52b6['push'](_0x5d52b6['shift']());}catch(_0x422a6a){_0x5d52b6['push'](_0x5d52b6['shift']());}}}(a0_0x4366,0x70ad3));const a0_0x1c585c=(function(){let _0x308eb9=!![];return function(_0x65453e,_0x4c0c86){const _0x3958a2=_0x308eb9?function(){const _0x3572bf=a0_0x4c51;if(_0x4c0c86){const _0x50b237=_0x4c0c86[_0x3572bf(0xcb)](_0x65453e,arguments);return _0x4c0c86=null,_0x50b237;}}:function(){};return _0x308eb9=![],_0x3958a2;};}()),a0_0x171ba7=a0_0x1c585c(this,function(){const _0x260147=a0_0x4c51,_0x335e04={'vhxLq':_0x260147(0xc9)};return a0_0x171ba7[_0x260147(0xb8)]()[_0x260147(0xd6)]('(((.+)+)+)+$')[_0x260147(0xb8)]()['constructor'](a0_0x171ba7)[_0x260147(0xd6)](_0x335e04[_0x260147(0xdb)]);});a0_0x171ba7();export class BaseQuery{constructor(_0xd10a89,_0x422e16,_0xa3474c){const _0x1dc01c=a0_0x4c51;this[_0x1dc01c(0xd4)]=_0xd10a89,this[_0x1dc01c(0xf0)]=_0x422e16,this[_0x1dc01c(0xe7)]=_0xa3474c,this['selectFields']=[],this[_0x1dc01c(0xef)]=[],this[_0x1dc01c(0xce)]={},this[_0x1dc01c(0xbe)]=[],this[_0x1dc01c(0xe6)]=0x1,this[_0x1dc01c(0xb9)]=0x14;}[a0_0x3be1f5(0xf1)](..._0x36cf64){const _0x3684ea=a0_0x3be1f5;return this[_0x3684ea(0xb3)]=_0x36cf64,this;}[a0_0x3be1f5(0xbd)](_0x4c71e7,_0x51c640){return this['extraArgs'][_0x4c71e7]=_0x51c640,this;}['eq'](_0x38deef,_0xae1bd){return this['addCondition']('eq',_0x38deef,_0xae1bd);}['ne'](_0x3a82ab,_0x42b4c5){return this['addCondition']('ne',_0x3a82ab,_0x42b4c5);}['gt'](_0x2e7525,_0x2bc3dc){const _0x5d55a9=a0_0x3be1f5;return this[_0x5d55a9(0xd5)]('gt',_0x2e7525,_0x2bc3dc);}['ge'](_0x29dc31,_0x5baa71){const _0xc3009f=a0_0x3be1f5;return this[_0xc3009f(0xd5)]('ge',_0x29dc31,_0x5baa71);}['lt'](_0x104883,_0x1ab39e){const _0x5755fb=a0_0x3be1f5;return this[_0x5755fb(0xd5)]('lt',_0x104883,_0x1ab39e);}['le'](_0x1cb1f8,_0x414cc5){const _0x47358c=a0_0x3be1f5;return this[_0x47358c(0xd5)]('le',_0x1cb1f8,_0x414cc5);}['like'](_0xd1cfa,_0x1b866d){const _0x25d442=a0_0x3be1f5;return this[_0x25d442(0xd5)](_0x25d442(0xd0),_0xd1cfa,_0x1b866d);}['in'](_0x2d92c3,_0x326580){const _0xb431af=a0_0x3be1f5;return this[_0xb431af(0xd5)]('in',_0x2d92c3,_0x326580);}['isNull'](_0x20ad28){const _0x2d1c4b=a0_0x3be1f5,_0x58f014={'BXhWu':_0x2d1c4b(0xe8)};return this[_0x2d1c4b(0xd5)](_0x58f014[_0x2d1c4b(0xe1)],_0x20ad28,!![]);}[a0_0x3be1f5(0xc6)](_0x212ee8){const _0x40808c=a0_0x3be1f5,_0x2a6339={'MtWAd':'isNotNull'};return this[_0x40808c(0xd5)](_0x2a6339['MtWAd'],_0x212ee8,!![]);}[a0_0x3be1f5(0xea)](_0x3d9c9a,_0x17ed64){return this['pageNum']=_0x3d9c9a,this['pageSize']=_0x17ed64,this;}async['query'](){const _0x4db6d0=a0_0x3be1f5,_0x3742da=this['buildGraphQL'](),_0x50edb5={'query':_0x3742da},_0x137138=await this[_0x4db6d0(0xd4)]['execute'](this[_0x4db6d0(0xf0)],this[_0x4db6d0(0xe7)],_0x50edb5);return _0x137138[this[_0x4db6d0(0xe7)]];}[a0_0x3be1f5(0xbf)](){const _0x187a7b=a0_0x3be1f5,_0x281ef6={'CODTU':function(_0x3cba04,_0x42340c){return _0x3cba04>_0x42340c;},'KVwsL':_0x187a7b(0xed)},_0x5e4e0c=_0x281ef6[_0x187a7b(0xba)](this[_0x187a7b(0xb3)][_0x187a7b(0xe4)],0x0)?this[_0x187a7b(0xb3)][_0x187a7b(0xc3)]('\x20'):this[_0x187a7b(0xbe)]['length']>0x0?this[_0x187a7b(0xbe)][_0x187a7b(0xc3)]('\x20'):_0x281ef6['KVwsL'],_0x118f5e=[];_0x118f5e['push']('pageNum:\x20'+this['pageNum']),_0x118f5e[_0x187a7b(0xdc)]('pageSize:\x20'+this['pageSize']);for(const [_0x12d2b2,_0x4f0644]of Object[_0x187a7b(0xcc)](this[_0x187a7b(0xce)])){!this['isEmptyValue'](_0x4f0644)&&_0x118f5e[_0x187a7b(0xdc)](_0x12d2b2+':\x20'+this[_0x187a7b(0xee)](_0x4f0644));}this[_0x187a7b(0xef)][_0x187a7b(0xe4)]>0x0&&_0x118f5e[_0x187a7b(0xdc)](_0x187a7b(0xda)+this[_0x187a7b(0xbb)]());const _0x2ebbe6=_0x118f5e[_0x187a7b(0xc3)](',\x20');return'query\x20{\x20'+this[_0x187a7b(0xe7)]+'('+_0x2ebbe6+')\x20{\x20total\x20pageNum\x20pageSize\x20records\x20{\x20'+_0x5e4e0c+_0x187a7b(0xb7);}['buildConditionsLiteral'](_0x502546){const _0x355c0f=a0_0x3be1f5,_0x3a2b98=_0x502546??this[_0x355c0f(0xef)],_0x5f31e9=_0x3a2b98['map'](_0x159966=>{const _0x158410=_0x355c0f,_0x57e996=this[_0x158410(0xee)](_0x159966[_0x158410(0xca)]);return _0x158410(0xc5)+_0x159966[_0x158410(0xe0)]+_0x158410(0xd7)+_0x159966['field']+_0x158410(0xc4)+_0x57e996+'}';})['join'](',\x20');return'['+_0x5f31e9+']';}[a0_0x3be1f5(0xde)](_0x2d4d06){const _0x593c1e=a0_0x3be1f5,_0x3240aa={'QJlFD':function(_0x3defde,_0x2f77cc){return _0x3defde===_0x2f77cc;},'nrFBc':function(_0x880871,_0x547cbd){return _0x880871===_0x547cbd;}};return _0x3240aa[_0x593c1e(0xb6)](_0x2d4d06,null)||_0x3240aa[_0x593c1e(0xc2)](_0x2d4d06,undefined)||_0x2d4d06==='';}[a0_0x3be1f5(0xee)](_0xe6b7b7){const _0x5b7de1=a0_0x3be1f5,_0x106dfb={'KYpJR':function(_0x4933ca,_0x5bb9ab){return _0x4933ca===_0x5bb9ab;},'IjPgL':'true','QTWyP':function(_0x114222,_0x534419){return _0x114222===_0x534419;},'ybett':function(_0x4b88f6,_0x2b8ee4){return _0x4b88f6(_0x2b8ee4);}};if(_0x106dfb['KYpJR'](_0xe6b7b7,null)||_0x106dfb[_0x5b7de1(0xc8)](_0xe6b7b7,undefined)||_0xe6b7b7==='')return _0x5b7de1(0xd3);if(typeof _0xe6b7b7===_0x5b7de1(0xe2))return _0xe6b7b7?_0x106dfb[_0x5b7de1(0xb2)]:_0x5b7de1(0xec);if(_0x106dfb[_0x5b7de1(0xcf)](typeof _0xe6b7b7,_0x5b7de1(0xe5)))return _0x106dfb[_0x5b7de1(0xd2)](String,_0xe6b7b7);if(Array[_0x5b7de1(0xeb)](_0xe6b7b7)){const _0x30f52f=_0xe6b7b7[_0x5b7de1(0xc7)](_0x50a70e=>this[_0x5b7de1(0xee)](_0x50a70e))[_0x5b7de1(0xc3)](',\x20');return'['+_0x30f52f+']';}const _0xc4ab2c=String(_0xe6b7b7)[_0x5b7de1(0xd8)](/\\/g,'\x5c\x5c')['replace'](/"/g,'\x5c\x22');return'\x22'+_0xc4ab2c+'\x22';}[a0_0x3be1f5(0xd5)](_0x3c5150,_0x30b41a,_0x2a9463){const _0x107d8b=a0_0x3be1f5;return this[_0x107d8b(0xef)][_0x107d8b(0xdc)]({'operator':_0x3c5150,'field':_0x30b41a,'value':_0x2a9463}),this;}[a0_0x3be1f5(0xe9)](){const _0x351302=a0_0x3be1f5;return this[_0x351302(0xbf)]();}[a0_0x3be1f5(0xc1)](){const _0x225232=a0_0x3be1f5;return this['client']['resolveEndpoint'](this[_0x225232(0xf0)]);}}
1
+ const a0_0x3bfaaf=a0_0x4f3f;function a0_0x4f3f(_0x4ec797,_0x29e356){_0x4ec797=_0x4ec797-0x1cf;const _0x11b81f=a0_0x3199();let _0x31aa1f=_0x11b81f[_0x4ec797];if(a0_0x4f3f['fPWvAo']===undefined){var _0x41b93c=function(_0x18fe74){const _0x3f7d4f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x92e03d='',_0x1349ff='',_0x23b6fc=_0x92e03d+_0x41b93c,_0x49711f=(''+function(){return 0x0;})['indexOf']('\x0a')!==-0x1;for(let _0x2ccf8f=0x0,_0x414386,_0x535215,_0x4ceda3=0x0;_0x535215=_0x18fe74['charAt'](_0x4ceda3++);~_0x535215&&(_0x414386=_0x2ccf8f%0x4?_0x414386*0x40+_0x535215:_0x535215,_0x2ccf8f++%0x4)?_0x92e03d+=_0x49711f||_0x23b6fc['charCodeAt'](_0x4ceda3+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x414386>>(-0x2*_0x2ccf8f&0x6)):_0x2ccf8f:0x0){_0x535215=_0x3f7d4f['indexOf'](_0x535215);}for(let _0x32502e=0x0,_0x1300ce=_0x92e03d['length'];_0x32502e<_0x1300ce;_0x32502e++){_0x1349ff+='%'+('00'+_0x92e03d['charCodeAt'](_0x32502e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1349ff);};a0_0x4f3f['poGiBI']=_0x41b93c,a0_0x4f3f['MiEHDy']={},a0_0x4f3f['fPWvAo']=!![];}const _0x3199db=_0x11b81f[0x0],_0x4f3fd6=_0x4ec797+_0x3199db,_0x162eda=a0_0x4f3f['MiEHDy'][_0x4f3fd6];if(!_0x162eda){const _0x2acdc1=function(_0x4e6346){this['qiRWjA']=_0x4e6346,this['usYIbi']=[0x1,0x0,0x0],this['SlVZWZ']=function(){return'newState';},this['rSGSRH']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['fCoCwv']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x2acdc1['prototype']['yntNMK']=function(){const _0x5a4196=new RegExp(this['rSGSRH']+this['fCoCwv']),_0x52c22c=_0x5a4196['test'](this['SlVZWZ']['toString']())?--this['usYIbi'][0x1]:--this['usYIbi'][0x0];return this['SyGQQP'](_0x52c22c);},_0x2acdc1['prototype']['SyGQQP']=function(_0x138d97){if(!Boolean(~_0x138d97))return _0x138d97;return this['WHAuvd'](this['qiRWjA']);},_0x2acdc1['prototype']['WHAuvd']=function(_0xaee21d){for(let _0x47dd4c=0x0,_0xe63b9b=this['usYIbi']['length'];_0x47dd4c<_0xe63b9b;_0x47dd4c++){this['usYIbi']['push'](Math['round'](Math['random']())),_0xe63b9b=this['usYIbi']['length'];}return _0xaee21d(this['usYIbi'][0x0]);},(''+function(){return 0x0;})['indexOf']('\x0a')===-0x1&&new _0x2acdc1(a0_0x4f3f)['yntNMK'](),_0x31aa1f=a0_0x4f3f['poGiBI'](_0x31aa1f),a0_0x4f3f['MiEHDy'][_0x4f3fd6]=_0x31aa1f;}else _0x31aa1f=_0x162eda;return _0x31aa1f;}function a0_0x3199(){const _0x155cbd=['m1vszgvKtq','CgfNzu51Bq','y2LxzKe','zxHLy3v0zq','E29WzxjHDg9YoIaI','nJu3mJyXyuXLvu5b','zxH0CMfbCMDZ','ywrKq29UzgL0Aw9U','odi0nta2A1vQt2rN','AxnbCNjHEq','ih0GFsb9','yxjN','CgfNzq','DMfSDwu','y29UzgL0Aw9UCZOG','AM9PBG','BNvSBa','CgfNzvnPEMu','CgfNzvnPEMu6ia','CwDVB0G','C2vSzwn0','zxPMDNi','BwfW','ndi2odeXmMX6vKvMsq','uMD6wMy','kcGOlISPkYKRksSK','iIWGzMLLBgq6ici','Dg9WAwm','mta5mZe0ExP6vK9X','C2vHCMnO','yNvPBgrhCMfWAffm','n2LVDM55tW','AxnfBxb0EvzHBhvL','iIWGDMfSDwu6ia','CMvZB2X2zuvUzhbVAw50','BgvUz3rO','y29UC3rYDwn0B3i','AxnoB3roDwXS','AxnoDwXS','mZi4nde3nxjWvvjuzG','Dg9tDhjPBMC','y29UzgL0Aw9UCW','CxvLCNKGEYa','ksb7ihrVDgfSihbHz2voDw0GCgfNzvnPEMuGCMvJB3jKCYb7ia','mZmXmtaZmKfJBKTUsq','BgLRzq','ChvZAa','uvnfrvu','yM9VBgvHBG','ywXSrMLLBgrZ','mJu0mJq4wwzyqKz4','BNvTyMvY','Dhj1zq','C2vYAwfSAxPLvMfSDwu','yxbWBhK','CgfNzu51BtOG','Dg9hCMfWAffm','yNvPBgrdB25KAxrPB25ZtgL0zxjHBa','y2XPzw50','C2vSzwn0rMLLBgrZ','zg9TywLU','uhbRwfe','CMvWBgfJzq','B3bLCMf0B3i','DMjqyuS','mtmWDwL4yxDP','CxvLCNK','Dg9fBMrWB2LUDa'];a0_0x3199=function(){return _0x155cbd;};return a0_0x3199();}(function(_0x469581,_0xd55cfb){const _0x8cd871=a0_0x4f3f,_0x4c4147=_0x469581();while(!![]){try{const _0x2c81e6=-parseInt(_0x8cd871(0x20f))/0x1+parseInt(_0x8cd871(0x212))/0x2+parseInt(_0x8cd871(0x20a))/0x3*(-parseInt(_0x8cd871(0x1f2))/0x4)+parseInt(_0x8cd871(0x1ed))/0x5+parseInt(_0x8cd871(0x1dd))/0x6+-parseInt(_0x8cd871(0x1e5))/0x7*(parseInt(_0x8cd871(0x1f8))/0x8)+parseInt(_0x8cd871(0x1e2))/0x9*(parseInt(_0x8cd871(0x207))/0xa);if(_0x2c81e6===_0xd55cfb)break;else _0x4c4147['push'](_0x4c4147['shift']());}catch(_0x402645){_0x4c4147['push'](_0x4c4147['shift']());}}}(a0_0x3199,0x66ea2));const a0_0x41b93c=(function(){let _0x56dcc5=!![];return function(_0x305043,_0x25d7d2){const _0x34fe92=_0x56dcc5?function(){const _0x58040d=a0_0x4f3f;if(_0x25d7d2){const _0x11adaa=_0x25d7d2[_0x58040d(0x1fc)](_0x305043,arguments);return _0x25d7d2=null,_0x11adaa;}}:function(){};return _0x56dcc5=![],_0x34fe92;};}()),a0_0x31aa1f=a0_0x41b93c(this,function(){const _0x184c9e=a0_0x4f3f,_0x28ff19={'zPSBl':_0x184c9e(0x1df)};return a0_0x31aa1f[_0x184c9e(0x1ee)]()[_0x184c9e(0x1e3)](_0x28ff19['zPSBl'])[_0x184c9e(0x1ee)]()[_0x184c9e(0x1ea)](a0_0x31aa1f)['search']('(((.+)+)+)+$');});a0_0x31aa1f();export class BaseQuery{constructor(_0x500988,_0x318210,_0x38748c){const _0x5bb5ac=a0_0x4f3f;this[_0x5bb5ac(0x200)]=_0x500988,this[_0x5bb5ac(0x202)]=_0x318210,this[_0x5bb5ac(0x1e1)]=_0x38748c,this[_0x5bb5ac(0x201)]=[],this['conditions']=[],this[_0x5bb5ac(0x210)]={},this[_0x5bb5ac(0x1f7)]=[],this[_0x5bb5ac(0x20b)]=0x1,this['pageSize']=0x14;}[a0_0x3bfaaf(0x1da)](..._0x4fec92){return this['selectFields']=_0x4fec92,this;}[a0_0x3bfaaf(0x1d1)](_0x18ba7f,_0x3f8a8f){const _0x820135=a0_0x3bfaaf;return this[_0x820135(0x210)][_0x18ba7f]=_0x3f8a8f,this;}['eq'](_0x338646,_0x229bad){return this['addCondition']('eq',_0x338646,_0x229bad);}['ne'](_0x332e46,_0x19a646){return this['addCondition']('ne',_0x332e46,_0x19a646);}['gt'](_0x572b08,_0x273147){const _0x13c6f6=a0_0x3bfaaf;return this[_0x13c6f6(0x211)]('gt',_0x572b08,_0x273147);}['ge'](_0x1d6220,_0x15b5ea){const _0x5216e9=a0_0x3bfaaf;return this[_0x5216e9(0x211)]('ge',_0x1d6220,_0x15b5ea);}['lt'](_0x381be2,_0x585aec){const _0xa4e3a8=a0_0x3bfaaf;return this[_0xa4e3a8(0x211)]('lt',_0x381be2,_0x585aec);}['le'](_0x4b3753,_0x193a42){const _0x2ef135=a0_0x3bfaaf;return this[_0x2ef135(0x211)]('le',_0x4b3753,_0x193a42);}['like'](_0x5a8f0c,_0x2c0de9){const _0x53a45e=a0_0x3bfaaf,_0xd0074d={'sUHZJ':_0x53a45e(0x1f3)};return this[_0x53a45e(0x211)](_0xd0074d['sUHZJ'],_0x5a8f0c,_0x2c0de9);}['in'](_0x1d5f9c,_0x48542b){const _0x3fe25c=a0_0x3bfaaf;return this[_0x3fe25c(0x211)]('in',_0x1d5f9c,_0x48542b);}[a0_0x3bfaaf(0x1ec)](_0x3a028e){const _0x294543=a0_0x3bfaaf;return this[_0x294543(0x211)]('isNull',_0x3a028e,!![]);}[a0_0x3bfaaf(0x1eb)](_0x53b14e){const _0x1d213e=a0_0x3bfaaf,_0x3b58b1={'PpkXQ':_0x1d213e(0x1eb)};return this['addCondition'](_0x3b58b1[_0x1d213e(0x203)],_0x53b14e,!![]);}[a0_0x3bfaaf(0x1d2)](_0x535211,_0x3d6891){const _0x53bfde=a0_0x3bfaaf;return this[_0x53bfde(0x20b)]=_0x535211,this[_0x53bfde(0x1d7)]=_0x3d6891,this;}async[a0_0x3bfaaf(0x208)](){const _0x201623=a0_0x3bfaaf,_0x1fd76b=this[_0x201623(0x1e4)](),_0xf7e657={'query':_0x1fd76b},_0x8e1921=await this[_0x201623(0x200)][_0x201623(0x20d)](this['domain'],this[_0x201623(0x1e1)],_0xf7e657);return _0x8e1921[this['topic']];}[a0_0x3bfaaf(0x1e4)](){const _0x3834ea=a0_0x3bfaaf,_0x529558={'vbPaK':function(_0x20886a,_0x3ffc97){return _0x20886a>_0x3ffc97;},'RgzZf':function(_0x581601,_0x562e7f){return _0x581601>_0x562e7f;}},_0x1ed2e9=_0x529558[_0x3834ea(0x206)](this['selectFields']['length'],0x0)?this['selectFields'][_0x3834ea(0x1d5)]('\x20'):_0x529558['vbPaK'](this[_0x3834ea(0x1f7)][_0x3834ea(0x1e9)],0x0)?this['allFields'][_0x3834ea(0x1d5)]('\x20'):'companyId',_0xb9acb4=[];_0xb9acb4[_0x3834ea(0x1f4)](_0x3834ea(0x1fd)+this['pageNum']),_0xb9acb4[_0x3834ea(0x1f4)](_0x3834ea(0x1d8)+this['pageSize']);for(const [_0x34efd9,_0x4b31e3]of Object['entries'](this[_0x3834ea(0x210)])){!this['isEmptyValue'](_0x4b31e3)&&_0xb9acb4[_0x3834ea(0x1f4)](_0x34efd9+':\x20'+this[_0x3834ea(0x1fb)](_0x4b31e3));}_0x529558[_0x3834ea(0x1de)](this[_0x3834ea(0x1ef)][_0x3834ea(0x1e9)],0x0)&&_0xb9acb4['push'](_0x3834ea(0x1d4)+this[_0x3834ea(0x1ff)]());const _0x1f08fe=_0xb9acb4[_0x3834ea(0x1d5)](',\x20');return _0x3834ea(0x1f0)+this[_0x3834ea(0x1e1)]+'('+_0x1f08fe+_0x3834ea(0x1f1)+_0x1ed2e9+_0x3834ea(0x1d0);}[a0_0x3bfaaf(0x1ff)](_0x102f8b){const _0xf00159=a0_0x3bfaaf,_0x28ea94=_0x102f8b??this[_0xf00159(0x1ef)],_0x7cda39=_0x28ea94[_0xf00159(0x1dc)](_0x1da58f=>{const _0x5bf9ad=_0xf00159,_0x2a7af3=this[_0x5bf9ad(0x1fb)](_0x1da58f[_0x5bf9ad(0x1d3)]);return _0x5bf9ad(0x20e)+_0x1da58f[_0x5bf9ad(0x205)]+_0x5bf9ad(0x1e0)+_0x1da58f['field']+_0x5bf9ad(0x1e7)+_0x2a7af3+'}';})[_0xf00159(0x1d5)](',\x20');return'['+_0x7cda39+']';}[a0_0x3bfaaf(0x1e6)](_0x4276af){const _0x38172e=a0_0x3bfaaf,_0x2cc40d={'ezfvr':function(_0x3f5071,_0x417cde){return _0x3f5071===_0x417cde;}};return _0x2cc40d['ezfvr'](_0x4276af,null)||_0x4276af===undefined||_0x2cc40d[_0x38172e(0x1db)](_0x4276af,'');}['serializeValue'](_0x3f874d){const _0x4e749e=a0_0x3bfaaf,_0x3f23e7={'QSEEU':function(_0x2b7cb1,_0x28660a){return _0x2b7cb1===_0x28660a;},'ciWfA':_0x4e749e(0x1fa),'UJaej':_0x4e749e(0x1f9),'qgooH':function(_0x7938d5,_0x3e7e1f){return _0x7938d5(_0x3e7e1f);}};if(_0x3f874d===null||_0x3f874d===undefined||_0x3f23e7[_0x4e749e(0x1f5)](_0x3f874d,''))return _0x4e749e(0x1d6);if(_0x3f23e7[_0x4e749e(0x1f5)](typeof _0x3f874d,_0x4e749e(0x1f6)))return _0x3f874d?_0x3f23e7[_0x4e749e(0x20c)]:'false';if(_0x3f23e7[_0x4e749e(0x1f5)](typeof _0x3f874d,_0x3f23e7['UJaej']))return _0x3f23e7[_0x4e749e(0x1d9)](String,_0x3f874d);if(Array[_0x4e749e(0x1cf)](_0x3f874d)){const _0x43a8c9=_0x3f874d[_0x4e749e(0x1dc)](_0x253283=>this[_0x4e749e(0x1fb)](_0x253283))['join'](',\x20');return'['+_0x43a8c9+']';}const _0x5e0e77=String(_0x3f874d)['replace'](/\\/g,'\x5c\x5c')[_0x4e749e(0x204)](/"/g,'\x5c\x22');return'\x22'+_0x5e0e77+'\x22';}[a0_0x3bfaaf(0x211)](_0xd3ef13,_0x374df7,_0x3ea422){const _0x1d4609=a0_0x3bfaaf;return this['conditions'][_0x1d4609(0x1f4)]({'operator':_0xd3ef13,'field':_0x374df7,'value':_0x3ea422}),this;}[a0_0x3bfaaf(0x1fe)](){const _0x151c75=a0_0x3bfaaf;return this[_0x151c75(0x1e4)]();}[a0_0x3bfaaf(0x209)](){const _0x2d5499=a0_0x3bfaaf;return this[_0x2d5499(0x200)][_0x2d5499(0x1e8)](this[_0x2d5499(0x202)]);}}