@jctrans/dw-sdk 1.0.0

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.
@@ -0,0 +1,124 @@
1
+ /**
2
+ * ============================================================
3
+ * @jctrans/dw-sdk — 前端 TypeScript GraphQL SDK 统一入口
4
+ * ============================================================
5
+ *
6
+ * 【对齐 Java 后端】
7
+ * - 所有主题域 Manager 使用工厂函数 createDwSdk() 创建
8
+ * - 端点: POST {baseUrl}/api/{domain}/{topic}/graphql
9
+ * - GraphQL query 格式对齐 data-common/GraphQLQueryBuilder.java
10
+ *
11
+ * 【Network 面板可见性】
12
+ * 每个查询请求 URL 包含 domain 和 topic 路径段,
13
+ * 浏览器 DevTools → Network 可按路径筛选和定位:
14
+ * /api/opportunity/opportunityEffectiveBoardPage/graphql
15
+ * /api/order/adsOrderPage/graphql
16
+ *
17
+ * 【SSR 避坑指南 — 导出工厂函数,禁止模块顶层单例】
18
+ *
19
+ * ❌ 错误做法(Cross-Request State Pollution):
20
+ * export const dwSdk = new DwSdk({ baseUrl: '/api' });
21
+ * // ↑ 在 SSR 下,模块只会加载一次,所有用户/请求共享同一个实例!
22
+ *
23
+ * ✅ 正确做法:
24
+ * 调用方在每次请求上下文中调用 createDwSdk(config) 创建新实例:
25
+ *
26
+ * // Nuxt 3 server/api/ 中:
27
+ * export default defineEventHandler(async (event) => {
28
+ * const sdk = createDwSdk({
29
+ * baseUrl: 'https://api.jctrans.net.cn',
30
+ * headers: { Cookie: getHeader(event, 'cookie') ?? '' },
31
+ * });
32
+ * return sdk.opportunity.opportunityEffectiveBoardPage()
33
+ * .select('companyId', 'periodType', 'inquiryCount')
34
+ * .arg('companyId', 12345)
35
+ * .query();
36
+ * });
37
+ *
38
+ * // Vue 3 客户端中:
39
+ * const sdk = createDwSdk({ baseUrl: '/api' });
40
+ * const result = await sdk.opportunity.opportunityEffectiveBoardPage()
41
+ * .select('companyId', 'periodType')
42
+ * .arg('companyId', 12345)
43
+ * .query();
44
+ *
45
+ * 【扩展指南】
46
+ * api-builder 增量生成新的主题域 Manager 后:
47
+ * 1. 在下方 import 新 Manager
48
+ * 2. 在 DwSdk 接口中添加对应字段
49
+ * 3. 在 createDwSdk 函数体中实例化
50
+ * 4. 调用方无需任何改动(TypeScript 自动推断新字段类型)
51
+ */
52
+ import { type GraphQLClientConfig } from './core/GraphQLClient';
53
+ import { OpportunityManager } from './generated/opportunity/OpportunityManager';
54
+ export { GraphQLClient, GraphQLClientError } from './core/GraphQLClient';
55
+ export type { GraphQLClientConfig, GraphQLRequest, GraphQLResponse } from './core/GraphQLClient';
56
+ export { BaseQuery } from './core/BaseQuery';
57
+ export type { PageResult, Condition, ConditionOperator } from './core/BaseQuery';
58
+ export type { OpportunityEffectiveBoard, OpportunityEffectiveBoardInput, OpportunityEffectiveBoardPageResponse, OpportunityEffectiveBoardField, } from './generated/opportunity/types';
59
+ export type { DateType, OpportunityBoardParams, BoardQueryResult, BoardPageData, } from './services/opportunity/types';
60
+ export { validateBoardParams } from './services/opportunity/validator';
61
+ export type { ValidationResult } from './services/opportunity/types';
62
+ export { BoardService } from './services/opportunity/BoardService';
63
+ /**
64
+ * 数据仓库前端 SDK 的顶层接口。
65
+ * 每新增一个主题域 Manager,在此处追加一个字段。
66
+ *
67
+ * 【类型推断机制 — 全链路类型推断】
68
+ * sdk.opportunity → OpportunityManager
69
+ * → opportunityEffectiveBoardPage() → OpportunityEffectiveBoardQuery
70
+ * → .query() → Promise<OpportunityEffectiveBoardPageResponse>
71
+ */
72
+ export interface DwSdk {
73
+ /** 商机主题域 */
74
+ opportunity: OpportunityManager;
75
+ }
76
+ /**
77
+ * 创建数据仓库前端 SDK 实例。
78
+ *
79
+ * 【SSR 安全设计】
80
+ * 每次调用创建全新的 GraphQLClient + 各 Manager 实例,
81
+ * headers 由外部注入,杜绝跨请求状态污染。
82
+ *
83
+ * 【端点格式】
84
+ * 每个查询自动生成独立端点 URL:
85
+ * POST {baseUrl}/api/{domain}/{topic}/graphql
86
+ * 在浏览器 Network 面板中清晰可见。
87
+ *
88
+ * @param config - GraphQLClient 配置
89
+ * @returns DwSdk 实例
90
+ *
91
+ * 示例(SSR):
92
+ * ```ts
93
+ * // Nuxt 3 server/api/opportunity/board.ts
94
+ * import { createDwSdk } from '@jctrans/dw-sdk';
95
+ *
96
+ * export default defineEventHandler(async (event) => {
97
+ * const sdk = createDwSdk({
98
+ * baseUrl: useRuntimeConfig().apiBaseUrl,
99
+ * headers: { Cookie: getHeader(event, 'cookie') ?? '' },
100
+ * });
101
+ * return sdk.opportunity.opportunityEffectiveBoardPage()
102
+ * .select('companyId', 'periodType', 'statYear', 'inquiryCount', 'responseCount')
103
+ * .arg('companyId', 12345)
104
+ * .eq('statYear', 2026)
105
+ * .page(1, 20)
106
+ * .query();
107
+ * });
108
+ * ```
109
+ *
110
+ * 示例(CSR):
111
+ * ```ts
112
+ * // Vue 3 setup 中:
113
+ * import { createDwSdk } from '@jctrans/dw-sdk';
114
+ *
115
+ * const sdk = createDwSdk({ baseUrl: '/api' });
116
+ * const { records, total } = await sdk.opportunity.opportunityEffectiveBoardPage()
117
+ * .select('companyId', 'periodType', 'inquiryCount')
118
+ * .arg('companyId', 12345)
119
+ * .page(1, 20)
120
+ * .query();
121
+ * ```
122
+ */
123
+ export declare function createDwSdk(config: GraphQLClientConfig): DwSdk;
124
+ export default createDwSdk;
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ function a5_0xb0b9(){const _0x2aff23=['mZm3nteWwhf6EMXm','kcGOlISPkYKRksSK','mJm4ndG3nu9QALbnDa','mJCWmJu1uNLTshjs','C2vHCMnO','Dg9tDhjPBMC','mtK1AwHSBg1Y','mtm3ovLfs2nJra','yxbWBhK','mtG5mdrgCNr4uvK','nZCWoefItvrmCG','s0fJA3C','mZaWnZyYmgvHuu1xyW','odi0mJmYsMLUC2Dr'];a5_0xb0b9=function(){return _0x2aff23;};return a5_0xb0b9();}(function(_0x3549b6,_0x59a719){const _0x3bdcc6=a5_0xdc5e,_0x12cd81=_0x3549b6();while(!![]){try{const _0x337df8=-parseInt(_0x3bdcc6(0x1e3))/0x1+parseInt(_0x3bdcc6(0x1e0))/0x2+parseInt(_0x3bdcc6(0x1e6))/0x3*(-parseInt(_0x3bdcc6(0x1dc))/0x4)+parseInt(_0x3bdcc6(0x1e2))/0x5+parseInt(_0x3bdcc6(0x1df))/0x6+parseInt(_0x3bdcc6(0x1e7))/0x7*(-parseInt(_0x3bdcc6(0x1db))/0x8)+parseInt(_0x3bdcc6(0x1de))/0x9;if(_0x337df8===_0x59a719)break;else _0x12cd81['push'](_0x12cd81['shift']());}catch(_0x4a8702){_0x12cd81['push'](_0x12cd81['shift']());}}}(a5_0xb0b9,0x3e905));const a5_0x21de83=(function(){let _0x22d937=!![];return function(_0x453c37,_0x36b154){const _0xde6468=_0x22d937?function(){const _0x1087d4=a5_0xdc5e;if(_0x36b154){const _0x2281a4=_0x36b154[_0x1087d4(0x1da)](_0x453c37,arguments);return _0x36b154=null,_0x2281a4;}}:function(){};return _0x22d937=![],_0xde6468;};}()),a5_0xf2d4f=a5_0x21de83(this,function(){const _0x2b6dfc=a5_0xdc5e,_0x2db145={'KAckw':_0x2b6dfc(0x1e1)};return a5_0xf2d4f[_0x2b6dfc(0x1e5)]()[_0x2b6dfc(0x1e4)]('(((.+)+)+)+$')['toString']()['constructor'](a5_0xf2d4f)[_0x2b6dfc(0x1e4)](_0x2db145[_0x2b6dfc(0x1dd)]);});a5_0xf2d4f();import{GraphQLClient}from'./core/GraphQLClient';import{OpportunityManager}from'./generated/opportunity/OpportunityManager';export{GraphQLClient,GraphQLClientError}from'./core/GraphQLClient';export{BaseQuery}from'./core/BaseQuery';export{validateBoardParams}from'./services/opportunity/validator';export{BoardService}from'./services/opportunity/BoardService';export function createDwSdk(_0x579ff2){const _0x5c31dc=new GraphQLClient(_0x579ff2);return{'opportunity':new OpportunityManager(_0x5c31dc)};}function a5_0xdc5e(_0x3a470e,_0x44b7b4){_0x3a470e=_0x3a470e-0x1da;const _0x4acab7=a5_0xb0b9();let _0xf2d4f=_0x4acab7[_0x3a470e];if(a5_0xdc5e['FJsqIn']===undefined){var _0x21de83=function(_0x67df42){const _0x223e62='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x240740='',_0x11d273='',_0x483423=_0x240740+_0x21de83,_0x112158=(''+function(){return 0x0;})['indexOf']('\x0a')!==-0x1;for(let _0x11ecc2=0x0,_0x44e842,_0x19b19f,_0x545a78=0x0;_0x19b19f=_0x67df42['charAt'](_0x545a78++);~_0x19b19f&&(_0x44e842=_0x11ecc2%0x4?_0x44e842*0x40+_0x19b19f:_0x19b19f,_0x11ecc2++%0x4)?_0x240740+=_0x112158||_0x483423['charCodeAt'](_0x545a78+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x44e842>>(-0x2*_0x11ecc2&0x6)):_0x11ecc2:0x0){_0x19b19f=_0x223e62['indexOf'](_0x19b19f);}for(let _0x5a7ae8=0x0,_0x96070c=_0x240740['length'];_0x5a7ae8<_0x96070c;_0x5a7ae8++){_0x11d273+='%'+('00'+_0x240740['charCodeAt'](_0x5a7ae8)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x11d273);};a5_0xdc5e['eySplI']=_0x21de83,a5_0xdc5e['IFScyA']={},a5_0xdc5e['FJsqIn']=!![];}const _0xb0b9c2=_0x4acab7[0x0],_0xdc5e67=_0x3a470e+_0xb0b9c2,_0x8a937e=a5_0xdc5e['IFScyA'][_0xdc5e67];if(!_0x8a937e){const _0x4968a6=function(_0x229551){this['nZBLDb']=_0x229551,this['bgVGfW']=[0x1,0x0,0x0],this['pQaLWP']=function(){return'newState';},this['GNRccD']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['tuQbjw']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x4968a6['prototype']['hPsrRF']=function(){const _0x3dc297=new RegExp(this['GNRccD']+this['tuQbjw']),_0x1f9d5d=_0x3dc297['test'](this['pQaLWP']['toString']())?--this['bgVGfW'][0x1]:--this['bgVGfW'][0x0];return this['jRshyt'](_0x1f9d5d);},_0x4968a6['prototype']['jRshyt']=function(_0x3d6369){if(!Boolean(~_0x3d6369))return _0x3d6369;return this['dbCFaD'](this['nZBLDb']);},_0x4968a6['prototype']['dbCFaD']=function(_0x17feb4){for(let _0x1fa865=0x0,_0x1cdcd8=this['bgVGfW']['length'];_0x1fa865<_0x1cdcd8;_0x1fa865++){this['bgVGfW']['push'](Math['round'](Math['random']())),_0x1cdcd8=this['bgVGfW']['length'];}return _0x17feb4(this['bgVGfW'][0x0]);},(''+function(){return 0x0;})['indexOf']('\x0a')===-0x1&&new _0x4968a6(a5_0xdc5e)['hPsrRF'](),_0xf2d4f=a5_0xdc5e['eySplI'](_0xf2d4f),a5_0xdc5e['IFScyA'][_0xdc5e67]=_0xf2d4f;}else _0xf2d4f=_0x8a937e;return _0xf2d4f;}export default createDwSdk;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * ============================================================
3
+ * services/opportunity/BoardService.ts
4
+ * ============================================================
5
+ *
6
+ * 【职责】
7
+ * 封装商机有效看板的底层 SDK 调用,提供语义化的查询接口。
8
+ *
9
+ * 【使用示例】
10
+ * ```ts
11
+ * const sdk = createDwSdk({ baseUrl: 'https://api.jctrans.net.cn' });
12
+ *
13
+ * // 季度查询
14
+ * const result = await sdk.opportunity.board.query({
15
+ * compId: 12345,
16
+ * dateType: 'QUARTER',
17
+ * dateValue: '2026-Q2',
18
+ * });
19
+ *
20
+ * // 年度查询
21
+ * const result = await sdk.opportunity.board.query({
22
+ * compId: 12345,
23
+ * dateType: 'YEAR',
24
+ * dateValue: '2026',
25
+ * });
26
+ *
27
+ * // 月度查询
28
+ * const result = await sdk.opportunity.board.query({
29
+ * compId: 12345,
30
+ * dateType: 'MONTH',
31
+ * dateValue: '2026-06',
32
+ * });
33
+ *
34
+ * if (result.success) {
35
+ * console.log(result.data.records);
36
+ * } else {
37
+ * console.error(result.error);
38
+ * }
39
+ * ```
40
+ */
41
+ import type { GraphQLClient } from '../../core/GraphQLClient';
42
+ import type { OpportunityBoardParams, BoardQueryResult } from './types';
43
+ export declare class BoardService {
44
+ private readonly manager;
45
+ constructor(client: GraphQLClient);
46
+ /**
47
+ * 查询商机有效看板数据。
48
+ *
49
+ * 【参数校验】
50
+ * 入参不符合格式时,不抛异常,返回 { success: false, error: '...' }。
51
+ *
52
+ * 【分页】
53
+ * 当前固定 page(1, 20),后续可按需扩展 pageNum/pageSize 参数。
54
+ *
55
+ * @param params - 查询参数 { compId, dateType, dateValue }
56
+ * @returns BoardQueryResult
57
+ */
58
+ query(params: OpportunityBoardParams): Promise<BoardQueryResult>;
59
+ }
@@ -0,0 +1 @@
1
+ const a6_0x4bdeaf=a6_0x5bf3;(function(_0x4aeb66,_0x17e3a5){const _0x182bfb=a6_0x5bf3,_0x4cd321=_0x4aeb66();while(!![]){try{const _0x4c385b=-parseInt(_0x182bfb(0xe6))/0x1+parseInt(_0x182bfb(0xc6))/0x2*(-parseInt(_0x182bfb(0xcd))/0x3)+-parseInt(_0x182bfb(0xb3))/0x4+-parseInt(_0x182bfb(0xec))/0x5*(parseInt(_0x182bfb(0xd6))/0x6)+-parseInt(_0x182bfb(0xe5))/0x7*(parseInt(_0x182bfb(0xaf))/0x8)+parseInt(_0x182bfb(0xb0))/0x9*(-parseInt(_0x182bfb(0xd3))/0xa)+parseInt(_0x182bfb(0xbb))/0xb*(parseInt(_0x182bfb(0xce))/0xc);if(_0x4c385b===_0x17e3a5)break;else _0x4cd321['push'](_0x4cd321['shift']());}catch(_0xcaca0e){_0x4cd321['push'](_0x4cd321['shift']());}}}(a6_0x283d,0x7438d));const a6_0x2d53d7=(function(){let _0x36f72c=!![];return function(_0x1d96c4,_0x587b7c){const _0x174ad3=_0x36f72c?function(){const _0x27c826=a6_0x5bf3;if(_0x587b7c){const _0x365749=_0x587b7c[_0x27c826(0xe7)](_0x1d96c4,arguments);return _0x587b7c=null,_0x365749;}}:function(){};return _0x36f72c=![],_0x174ad3;};}()),a6_0xee6ff=a6_0x2d53d7(this,function(){const _0x2ec3df=a6_0x5bf3,_0x3284bc={'RJiVa':_0x2ec3df(0xc5)};return a6_0xee6ff[_0x2ec3df(0xb2)]()[_0x2ec3df(0xf1)](_0x3284bc[_0x2ec3df(0xe1)])[_0x2ec3df(0xb2)]()[_0x2ec3df(0xe8)](a6_0xee6ff)[_0x2ec3df(0xf1)](_0x3284bc[_0x2ec3df(0xe1)]);});a6_0xee6ff();function a6_0x5bf3(_0x27306e,_0x1dd46f){_0x27306e=_0x27306e-0xaf;const _0x393f11=a6_0x283d();let _0xee6ff=_0x393f11[_0x27306e];if(a6_0x5bf3['EYbaKg']===undefined){var _0x2d53d7=function(_0x2a36ff){const _0xc9b243='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5ec452='',_0x5477c1='',_0x1a93dd=_0x5ec452+_0x2d53d7,_0x4a0518=(''+function(){return 0x0;})['indexOf']('\x0a')!==-0x1;for(let _0x1dfb69=0x0,_0x5dc791,_0x5ac7c8,_0x5953db=0x0;_0x5ac7c8=_0x2a36ff['charAt'](_0x5953db++);~_0x5ac7c8&&(_0x5dc791=_0x1dfb69%0x4?_0x5dc791*0x40+_0x5ac7c8:_0x5ac7c8,_0x1dfb69++%0x4)?_0x5ec452+=_0x4a0518||_0x1a93dd['charCodeAt'](_0x5953db+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x5dc791>>(-0x2*_0x1dfb69&0x6)):_0x1dfb69:0x0){_0x5ac7c8=_0xc9b243['indexOf'](_0x5ac7c8);}for(let _0x1a0560=0x0,_0x5ee04f=_0x5ec452['length'];_0x1a0560<_0x5ee04f;_0x1a0560++){_0x5477c1+='%'+('00'+_0x5ec452['charCodeAt'](_0x1a0560)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5477c1);};a6_0x5bf3['OdFiKQ']=_0x2d53d7,a6_0x5bf3['EPObxS']={},a6_0x5bf3['EYbaKg']=!![];}const _0x283d34=_0x393f11[0x0],_0x5bf385=_0x27306e+_0x283d34,_0x3fe8bf=a6_0x5bf3['EPObxS'][_0x5bf385];if(!_0x3fe8bf){const _0x394d34=function(_0x2de42){this['AsgVji']=_0x2de42,this['eNxMfG']=[0x1,0x0,0x0],this['DvKFkd']=function(){return'newState';},this['zckmie']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['OhueGQ']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x394d34['prototype']['JBaRdG']=function(){const _0x3e909d=new RegExp(this['zckmie']+this['OhueGQ']),_0x3a89d5=_0x3e909d['test'](this['DvKFkd']['toString']())?--this['eNxMfG'][0x1]:--this['eNxMfG'][0x0];return this['ZvFpTL'](_0x3a89d5);},_0x394d34['prototype']['ZvFpTL']=function(_0x397169){if(!Boolean(~_0x397169))return _0x397169;return this['kSdvmH'](this['AsgVji']);},_0x394d34['prototype']['kSdvmH']=function(_0x2d35f6){for(let _0x30f202=0x0,_0x1cfe57=this['eNxMfG']['length'];_0x30f202<_0x1cfe57;_0x30f202++){this['eNxMfG']['push'](Math['round'](Math['random']())),_0x1cfe57=this['eNxMfG']['length'];}return _0x2d35f6(this['eNxMfG'][0x0]);},(''+function(){return 0x0;})['indexOf']('\x0a')===-0x1&&new _0x394d34(a6_0x5bf3)['JBaRdG'](),_0xee6ff=a6_0x5bf3['OdFiKQ'](_0xee6ff),a6_0x5bf3['EPObxS'][_0x5bf385]=_0xee6ff;}else _0xee6ff=_0x3fe8bf;return _0xee6ff;}import{OpportunityManager}from'../../generated/opportunity/OpportunityManager';import{validateBoardParams}from'./validator';function parseDateParams(_0x3ca089,_0x15bb8e,_0x13d503){const _0x4bc62b=a6_0x5bf3,_0x3ce404={'yRLNB':'quarter','dnOux':'YEAR','fTqqf':_0x4bc62b(0xe3),'gTKkD':function(_0x443a0a,_0x34cb92,_0x1eee4b){return _0x443a0a(_0x34cb92,_0x1eee4b);},'kxYUk':_0x4bc62b(0xdf)},_0x5c9980={'companyId':_0x3ca089,'statYear':0x0,'periodType':''};switch(_0x15bb8e){case'QUARTER':{const _0x2acaae=_0x13d503['split']('-Q');_0x5c9980[_0x4bc62b(0xd2)]=parseInt(_0x2acaae[0x0],0xa),_0x5c9980[_0x4bc62b(0xc4)]=_0x3ce404[_0x4bc62b(0xe4)],_0x5c9980['statQuarter']=parseInt(_0x2acaae[0x1],0xa);break;}case _0x3ce404[_0x4bc62b(0xd4)]:{_0x5c9980['statYear']=parseInt(_0x13d503,0xa),_0x5c9980['periodType']=_0x4bc62b(0xdb);break;}case _0x3ce404['fTqqf']:{const _0x3fe0c7=_0x13d503[_0x4bc62b(0xc2)]('-');_0x5c9980[_0x4bc62b(0xd2)]=_0x3ce404[_0x4bc62b(0xca)](parseInt,_0x3fe0c7[0x0],0xa),_0x5c9980[_0x4bc62b(0xc4)]=_0x3ce404[_0x4bc62b(0xe0)],_0x5c9980['statMonth']=parseInt(_0x3fe0c7[0x1],0xa);break;}}return _0x5c9980;}export class BoardService{constructor(_0x5402aa){const _0x357937=a6_0x5bf3;this[_0x357937(0xcf)]=new OpportunityManager(_0x5402aa);}async[a6_0x4bdeaf(0xbe)](_0x416025){const _0x372a3f=a6_0x4bdeaf,_0x3dc8ad={'JJWJn':_0x372a3f(0xc9),'teuxx':_0x372a3f(0xf0),'hrZuB':_0x372a3f(0xcb),'zkpUI':_0x372a3f(0xd0),'NWqIK':'responseCount','OOFeg':_0x372a3f(0xbc),'OgHex':_0x372a3f(0xef),'QWRKe':'imEffectiveCommunicateCount','YeyzM':_0x372a3f(0xea),'KPHSZ':_0x372a3f(0xbd),'dvtCR':_0x372a3f(0xb5),'pCpon':_0x372a3f(0xd2),'cmact':_0x372a3f(0xc4)},_0x505c2e=validateBoardParams(_0x416025);if(!_0x505c2e[_0x372a3f(0xdd)])return{'success':![],'data':null,'error':_0x505c2e['error']??_0x3dc8ad[_0x372a3f(0xc1)]};const _0x2ed1cb=parseDateParams(_0x416025[_0x372a3f(0xed)],_0x416025[_0x372a3f(0xb1)],_0x416025[_0x372a3f(0xcc)]),_0x12c46b=this[_0x372a3f(0xcf)][_0x372a3f(0xdc)]()[_0x372a3f(0xda)](_0x3dc8ad['teuxx'],'periodType',_0x372a3f(0xd2),_0x372a3f(0xc0),_0x3dc8ad[_0x372a3f(0xb7)],_0x3dc8ad[_0x372a3f(0xe9)],_0x3dc8ad[_0x372a3f(0xee)],_0x372a3f(0xd1),_0x3dc8ad[_0x372a3f(0xb6)],'oneOnOneMeetCount',_0x3dc8ad[_0x372a3f(0xd5)],'viewedResponseCount',_0x372a3f(0xd8),_0x3dc8ad[_0x372a3f(0xc7)],_0x372a3f(0xde),_0x3dc8ad[_0x372a3f(0xf3)],_0x3dc8ad[_0x372a3f(0xeb)],'browseStoreCount',_0x372a3f(0xba),'visitorManageContactCount',_0x3dc8ad[_0x372a3f(0xc8)])[_0x372a3f(0xe2)](_0x3dc8ad[_0x372a3f(0xd7)],_0x2ed1cb[_0x372a3f(0xf0)])[_0x372a3f(0xe2)](_0x3dc8ad[_0x372a3f(0xbf)],_0x2ed1cb['statYear'])[_0x372a3f(0xe2)](_0x3dc8ad['cmact'],_0x2ed1cb[_0x372a3f(0xc4)])[_0x372a3f(0xb4)](0x1,0x14);_0x2ed1cb[_0x372a3f(0xc0)]!==undefined&&_0x12c46b[_0x372a3f(0xe2)](_0x372a3f(0xc0),_0x2ed1cb[_0x372a3f(0xc0)]);_0x2ed1cb[_0x372a3f(0xcb)]!==undefined&&_0x12c46b[_0x372a3f(0xe2)](_0x372a3f(0xcb),_0x2ed1cb[_0x372a3f(0xcb)]);try{const _0x224c6f=await _0x12c46b[_0x372a3f(0xbe)]();return{'success':!![],'data':{'total':_0x224c6f[_0x372a3f(0xc3)],'current':_0x224c6f[_0x372a3f(0xb8)],'size':_0x224c6f['size'],'pages':_0x224c6f[_0x372a3f(0xf2)],'records':_0x224c6f[_0x372a3f(0xb9)]},'error':null};}catch(_0x9e28cb){const _0x995ef=_0x9e28cb instanceof Error?_0x9e28cb['message']:'网络请求失败,请稍后重试';return{'success':![],'data':null,'error':_0x372a3f(0xd9)+_0x995ef};}}}function a6_0x283d(){const _0x4c43a2=['zgf0zvr5Cgu','Dg9tDhjPBMC','mJe4nZCXnLDXvhP0sq','CgfNzq','ChvIBgLZAezPBMrbz2vUDerLBwfUzenVDw50','t09gzwC','AhjADui','y3vYCMvUDa','CMvJB3jKCW','C3rVCMvdB250ywn0q291BNq','ndiWmJiYrNzsyvbL','Cg90zw50AwfSq3vZDg9TzxjdB3vUDa','zMLUzefNzw50q29UDgfJDenVDw50','CxvLCNK','CenWB24','C3rHDe1VBNrO','sKPxsM4','C3bSAxq','Dg90ywW','CgvYAw9KvhLWzq','kcGOlISPkYKRksSK','odiWmda2DvfKCfnl','uvDss2u','zhz0q1i','5y+c5PwW5QcH6AQm5AsX6lsL','z1rlA0q','C3rHDff1yxj0zxi','zgf0zvzHBhvL','m1LAz25YAq','mtiZnLHvq3Lbzq','BwfUywDLCG','Aw5XDwLYEunVDw50','CMvJzwL2zwrszxnWB25ZzunVDw50','C3rHDfLLyxi','mJq2odm1mg9uD211yW','zg5pDxG','t2DizxG','nJzOCKrPyxm','Dgv1EhG','Aw1dB21TDw5Py2f0zunVDw50','5P+L6k+I5AsX6lsL77YA','C2vSzwn0','EwvHCG','B3bWB3j0Dw5PDhLfzMzLy3rPDMvcB2fYzfbHz2u','DMfSAwq','DMLLD1jLy29TBwvUzefNzw50q291BNq','Bw9UDgG','A3HzvwS','uKPPvMe','yxjN','tu9oveG','EvjmtKi','n3Lbz09KuG','nZuYntm3rxnAvg1W','yxbWBhK','y29UC3rYDwn0B3i','EMTWvuK','zMLUzefNzw50rgvTyw5Kq291BNq','s1biu1O','mZeXntyWzeL4BwnU','y29TCeLK','tLDXsuS','C2vZC2LVBKnVDw50','y29TCgfUEuLK','C2vHCMnO','CgfNzxm','wwv5EK0','mJu4nJG0mfHcuvzPza','mJDhC1fJtue'];a6_0x283d=function(){return _0x4c43a2;};return a6_0x283d();}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * ============================================================
3
+ * services/opportunity/types.ts
4
+ * ============================================================
5
+ *
6
+ * 【职责】
7
+ * 商机看板封装层的参数类型与返回类型定义。
8
+ * 前端使用语义化入参(dateType/dateValue),由封装层负责映射到
9
+ * 底层 SDK 字段(statYear/statMonth/statQuarter/periodType)。
10
+ */
11
+ /** 日期聚合类型 */
12
+ export type DateType = 'QUARTER' | 'YEAR' | 'MONTH';
13
+ /**
14
+ * 商机看板查询入参。
15
+ *
16
+ * 使用示例:
17
+ * ```ts
18
+ * // 季度查询
19
+ * { compId: 12345, dateType: 'QUARTER', dateValue: '2026-Q2' }
20
+ *
21
+ * // 年度查询
22
+ * { compId: 12345, dateType: 'YEAR', dateValue: '2026' }
23
+ *
24
+ * // 月度查询
25
+ * { compId: 12345, dateType: 'MONTH', dateValue: '2026-06' }
26
+ * ```
27
+ */
28
+ export interface OpportunityBoardParams {
29
+ /** 公司ID(必填) */
30
+ compId: number;
31
+ /** 日期聚合类型 */
32
+ dateType: DateType;
33
+ /** 日期值,格式依 dateType 而定 */
34
+ dateValue: string;
35
+ }
36
+ export interface ValidationResult {
37
+ valid: boolean;
38
+ /** 校验失败时的错误描述 */
39
+ error?: string;
40
+ }
41
+ export interface BoardSdkParams {
42
+ companyId: number;
43
+ statYear: number;
44
+ periodType: string;
45
+ statMonth?: number;
46
+ statQuarter?: number;
47
+ }
48
+ import type { OpportunityEffectiveBoard } from '../../generated/opportunity/types';
49
+ /** 分页数据 */
50
+ export interface BoardPageData {
51
+ total: number;
52
+ current: number;
53
+ size: number;
54
+ pages: number;
55
+ records: OpportunityEffectiveBoard[];
56
+ }
57
+ /**
58
+ * 封装层查询返回结构。
59
+ *
60
+ * 【设计理念】
61
+ * 不抛异常,统一通过 { success, data, error } 结构返回,
62
+ * 前端无需 try/catch,直接判断 success 即可。
63
+ */
64
+ export interface BoardQueryResult {
65
+ success: boolean;
66
+ /** 成功时的分页数据 */
67
+ data: BoardPageData | null;
68
+ /** 失败时的错误描述 */
69
+ error: string | null;
70
+ }
@@ -0,0 +1 @@
1
+ (function(_0xf20c7d,_0x5412e2){var _0x561c66=a7_0x5dbf,_0x15391f=_0xf20c7d();while(!![]){try{var _0x3201b7=parseInt(_0x561c66(0x9f))/0x1+parseInt(_0x561c66(0x9e))/0x2*(-parseInt(_0x561c66(0x9a))/0x3)+-parseInt(_0x561c66(0xa7))/0x4*(parseInt(_0x561c66(0xa4))/0x5)+-parseInt(_0x561c66(0x9d))/0x6+-parseInt(_0x561c66(0xa6))/0x7*(parseInt(_0x561c66(0xa3))/0x8)+parseInt(_0x561c66(0xa5))/0x9*(parseInt(_0x561c66(0xa2))/0xa)+parseInt(_0x561c66(0x99))/0xb;if(_0x3201b7===_0x5412e2)break;else _0x15391f['push'](_0x15391f['shift']());}catch(_0x25a00e){_0x15391f['push'](_0x15391f['shift']());}}}(a7_0x2382,0x5f4f7));function a7_0x2382(){var _0x5d7e66=['otC2tfnnCKjh','mtuZnvnwzwTvvW','mteXnLPcs0vkrW','mZG1mJHdBuHOAuW','nZa0tMvgB3vX','Dg9tDhjPBMC','y29UC3rYDwn0B3i','ntG5mti5mMrqA0PMAq','otm2ovHLrgD4Aq','C2vHCMnO','yxbWBhK','mty4mtC0merdr3PeyW','nZH6tuzyC3i','nJm0otC4D1rSyLbb','D3brAg8','kcGOlISPkYKRksSK','mJGWmJbPCe1bzwy'];a7_0x2382=function(){return _0x5d7e66;};return a7_0x2382();}function a7_0x5dbf(_0x1ed96f,_0x4915a8){_0x1ed96f=_0x1ed96f-0x98;var _0x5a5090=a7_0x2382();var _0x4c87db=_0x5a5090[_0x1ed96f];if(a7_0x5dbf['EHuARP']===undefined){var _0x476986=function(_0x2682bb){var _0x597639='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x27641c='',_0x564944='',_0x202aeb=_0x27641c+_0x476986,_0x25b495=(''+function(){return 0x0;})['indexOf']('\x0a')!==-0x1;for(var _0x295e84=0x0,_0x3365be,_0x392671,_0x5e1cb1=0x0;_0x392671=_0x2682bb['charAt'](_0x5e1cb1++);~_0x392671&&(_0x3365be=_0x295e84%0x4?_0x3365be*0x40+_0x392671:_0x392671,_0x295e84++%0x4)?_0x27641c+=_0x25b495||_0x202aeb['charCodeAt'](_0x5e1cb1+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x3365be>>(-0x2*_0x295e84&0x6)):_0x295e84:0x0){_0x392671=_0x597639['indexOf'](_0x392671);}for(var _0x481a27=0x0,_0x5e2969=_0x27641c['length'];_0x481a27<_0x5e2969;_0x481a27++){_0x564944+='%'+('00'+_0x27641c['charCodeAt'](_0x481a27)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x564944);};a7_0x5dbf['vnmqRB']=_0x476986,a7_0x5dbf['pzDzQM']={},a7_0x5dbf['EHuARP']=!![];}var _0x2382b4=_0x5a5090[0x0],_0x5dbfa7=_0x1ed96f+_0x2382b4,_0x3ae422=a7_0x5dbf['pzDzQM'][_0x5dbfa7];if(!_0x3ae422){var _0x3ffeb7=function(_0x45db8b){this['bhgeJF']=_0x45db8b,this['WkvMEs']=[0x1,0x0,0x0],this['kiFaTT']=function(){return'newState';},this['lmmtCk']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['paUmQq']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x3ffeb7['prototype']['wJLlDV']=function(){var _0x4b7991=new RegExp(this['lmmtCk']+this['paUmQq']),_0x5a5a8f=_0x4b7991['test'](this['kiFaTT']['toString']())?--this['WkvMEs'][0x1]:--this['WkvMEs'][0x0];return this['cmDqnx'](_0x5a5a8f);},_0x3ffeb7['prototype']['cmDqnx']=function(_0x5811fc){if(!Boolean(~_0x5811fc))return _0x5811fc;return this['fvLoQe'](this['bhgeJF']);},_0x3ffeb7['prototype']['fvLoQe']=function(_0xbf45e4){for(var _0x5efc63=0x0,_0x3f060f=this['WkvMEs']['length'];_0x5efc63<_0x3f060f;_0x5efc63++){this['WkvMEs']['push'](Math['round'](Math['random']())),_0x3f060f=this['WkvMEs']['length'];}return _0xbf45e4(this['WkvMEs'][0x0]);},(''+function(){return 0x0;})['indexOf']('\x0a')===-0x1&&new _0x3ffeb7(a7_0x5dbf)['wJLlDV'](),_0x4c87db=a7_0x5dbf['vnmqRB'](_0x4c87db),a7_0x5dbf['pzDzQM'][_0x5dbfa7]=_0x4c87db;}else _0x4c87db=_0x3ae422;return _0x4c87db;}var a7_0x476986=(function(){var _0x521ed1=!![];return function(_0x3a6a57,_0x32392d){var _0x12114a=_0x521ed1?function(){var _0x3bb396=a7_0x5dbf;if(_0x32392d){var _0x5461bc=_0x32392d[_0x3bb396(0x9c)](_0x3a6a57,arguments);return _0x32392d=null,_0x5461bc;}}:function(){};return _0x521ed1=![],_0x12114a;};}()),a7_0x4c87db=a7_0x476986(this,function(){var _0xfcdc0e=a7_0x5dbf,_0x2f69d0={'wpQho':_0xfcdc0e(0xa1)};return a7_0x4c87db['toString']()[_0xfcdc0e(0x9b)](_0x2f69d0['wpQho'])[_0xfcdc0e(0xa8)]()[_0xfcdc0e(0x98)](a7_0x4c87db)[_0xfcdc0e(0x9b)](_0x2f69d0[_0xfcdc0e(0xa0)]);});a7_0x4c87db();export{};
@@ -0,0 +1,35 @@
1
+ /**
2
+ * ============================================================
3
+ * services/opportunity/validator.ts
4
+ * ============================================================
5
+ *
6
+ * 【职责】
7
+ * 校验商机看板查询入参,纯函数实现,零依赖。
8
+ *
9
+ * 【校验规则】
10
+ * - compId: 必填,number,> 0
11
+ * - dateType: 必填,'QUARTER' | 'YEAR' | 'MONTH'
12
+ * - dateValue: 必填,格式依 dateType 而定:
13
+ * QUARTER → YYYY-QN(如 2026-Q2,Q 取值 1-4)
14
+ * YEAR → YYYY(如 2026)
15
+ * MONTH → YYYY-MM(如 2026-06,MM 取值 01-12)
16
+ */
17
+ import type { ValidationResult } from './types';
18
+ /**
19
+ * 校验商机看板查询入参。
20
+ *
21
+ * @returns { valid: true } 或 { valid: false, error: '错误描述' }
22
+ *
23
+ * 示例:
24
+ * ```ts
25
+ * validateBoardParams({ compId: 123, dateType: 'QUARTER', dateValue: '2026-Q2' })
26
+ * // → { valid: true }
27
+ *
28
+ * validateBoardParams({ compId: 0, dateType: 'QUARTER', dateValue: '2026-Q2' })
29
+ * // → { valid: false, error: '参数错误:compId 必须大于 0' }
30
+ *
31
+ * validateBoardParams({ compId: 123, dateType: 'QUARTER', dateValue: 'bad' })
32
+ * // → { valid: false, error: '参数错误:dateValue 格式不正确,QUARTER 类型要求格式为 YYYY-QN(如 2026-Q2)' }
33
+ * ```
34
+ */
35
+ export declare function validateBoardParams(params: unknown): ValidationResult;
@@ -0,0 +1 @@
1
+ (function(_0x8d068c,_0x5756cf){const _0x3df979=a8_0x4d0e,_0x2fac0e=_0x8d068c();while(!![]){try{const _0x36eea4=parseInt(_0x3df979(0xc7))/0x1*(parseInt(_0x3df979(0xcf))/0x2)+-parseInt(_0x3df979(0xc8))/0x3+parseInt(_0x3df979(0xc2))/0x4+parseInt(_0x3df979(0xca))/0x5+parseInt(_0x3df979(0xc4))/0x6*(-parseInt(_0x3df979(0xbd))/0x7)+parseInt(_0x3df979(0xd5))/0x8+-parseInt(_0x3df979(0xc5))/0x9*(parseInt(_0x3df979(0xd1))/0xa);if(_0x36eea4===_0x5756cf)break;else _0x2fac0e['push'](_0x2fac0e['shift']());}catch(_0x4b8da0){_0x2fac0e['push'](_0x2fac0e['shift']());}}}(a8_0x48da,0xc15dd));const a8_0x57b614=(function(){let _0x8c1a89=!![];return function(_0x1a65b9,_0x2ab085){const _0x218562=_0x8c1a89?function(){const _0x989d50=a8_0x4d0e;if(_0x2ab085){const _0x43087c=_0x2ab085[_0x989d50(0xd8)](_0x1a65b9,arguments);return _0x2ab085=null,_0x43087c;}}:function(){};return _0x8c1a89=![],_0x218562;};}()),a8_0xdacb87=a8_0x57b614(this,function(){const _0x479c54=a8_0x4d0e,_0x432f6b={'MJVtP':_0x479c54(0xbb)};return a8_0xdacb87[_0x479c54(0xc0)]()['search'](_0x479c54(0xbb))[_0x479c54(0xc0)]()['constructor'](a8_0xdacb87)['search'](_0x432f6b[_0x479c54(0xd9)]);});function a8_0x48da(){const _0x225be6=['nJa3ndu5mKnwu1fpuq','EhHNvgq','BNvTyMvY','yxbWBhK','tuPwDfa','u3H6Dve','wMvtDeq','t0T5uMK','zgf0zvr5Cgu','5y+c5PwW6zsz6k+V77YAzgf0zvzHBhvLioAGVow8J+s4JEATO+EHRU+8Je1ptLriioEXU+wEI+IMGEAXGUAGVow8J+s4UIbzwvLzlu1n77Yi5AAcidiWmJyTmdBVViK','y0Xjzgu','uvvbuLrfuG','ChLftg0','DgvZDa','C3rYAw5N','zgf0zvzHBhvL','Aw5JBhvKzxm','5y+c5PwW6zsz6k+V77YAy29TCeLKios4UUw/HEwHQ+MHUq','kcGOlISPkYKRksSK','5y+c5PwW6zsz6k+V77YAzgf0zvzHBhvLioAGVow8J+s4JEATO+EHRU+8JfLfqviG57g75z6l6kAb5Rgc5Qc85BYp5lI6ifLzwvNVViJLPOiGmJaYnU+8Iq','mZy2mw91y2jfAq','EuDlqxe','5y+c5PwW6zsz6k+V77YA6k+35Rgc5y+c5PwW5lIn6io95lI656M6','Dg9tDhjPBMC','tuDls2q','mtaYmJuWnhf2y2HAza','ANjzrhq','mtq3mZbnyu5AD1G','mJi1swffshnZ','DNPKwu4','mJq2ogTUwwTvyG','mJu2nJm0n3Dpu01JAa','5y+c5PwW6zsz6k+V77YAzgf0zvzHBhvLios4UUw/HEwHQ+MHUq','nZq1nJCYmhfOvKDsEG','tu9oveG','s3nWshK','B2jQzwn0','vNLKuhy','nZm2yNnwrunw','5y+c5PwW6zsz6k+V77YAzgf0zvzHBhvLioAGVow8J+s4JEATO+EHRU+8JffvqvjurviG57g75z6l6kAb5Rgc5Qc85BYp5lI6ifLzwvKTuu7VViJLPOiGmJaYnI1rmU+8Iq','mtKZmJmWq2D6EMzN','sNjSCuO','B2vcB2i','y29TCeLK'];a8_0x48da=function(){return _0x225be6;};return a8_0x48da();}a8_0xdacb87();function a8_0x4d0e(_0x292a49,_0x3c1756){_0x292a49=_0x292a49-0xaf;const _0x31e53e=a8_0x48da();let _0xdacb87=_0x31e53e[_0x292a49];if(a8_0x4d0e['AjGreg']===undefined){var _0x57b614=function(_0x3c29ed){const _0xd622da='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x589881='',_0xc63832='',_0x1ffc56=_0x589881+_0x57b614,_0x37f291=(''+function(){return 0x0;})['indexOf']('\x0a')!==-0x1;for(let _0x497602=0x0,_0x28ab01,_0x240afc,_0x2aa2b0=0x0;_0x240afc=_0x3c29ed['charAt'](_0x2aa2b0++);~_0x240afc&&(_0x28ab01=_0x497602%0x4?_0x28ab01*0x40+_0x240afc:_0x240afc,_0x497602++%0x4)?_0x589881+=_0x37f291||_0x1ffc56['charCodeAt'](_0x2aa2b0+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x28ab01>>(-0x2*_0x497602&0x6)):_0x497602:0x0){_0x240afc=_0xd622da['indexOf'](_0x240afc);}for(let _0x6ac9fd=0x0,_0x2cad3d=_0x589881['length'];_0x6ac9fd<_0x2cad3d;_0x6ac9fd++){_0xc63832+='%'+('00'+_0x589881['charCodeAt'](_0x6ac9fd)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xc63832);};a8_0x4d0e['UkveYn']=_0x57b614,a8_0x4d0e['phurIW']={},a8_0x4d0e['AjGreg']=!![];}const _0x48da80=_0x31e53e[0x0],_0x4d0ed2=_0x292a49+_0x48da80,_0x264cbf=a8_0x4d0e['phurIW'][_0x4d0ed2];if(!_0x264cbf){const _0x4e1c70=function(_0x532a97){this['WBrqGW']=_0x532a97,this['VBiOzU']=[0x1,0x0,0x0],this['WUczsI']=function(){return'newState';},this['GNaEIV']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['ODWGMf']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x4e1c70['prototype']['xDeDUg']=function(){const _0x3ff137=new RegExp(this['GNaEIV']+this['ODWGMf']),_0x37dc33=_0x3ff137['test'](this['WUczsI']['toString']())?--this['VBiOzU'][0x1]:--this['VBiOzU'][0x0];return this['RHVeLS'](_0x37dc33);},_0x4e1c70['prototype']['RHVeLS']=function(_0x17cfcd){if(!Boolean(~_0x17cfcd))return _0x17cfcd;return this['YvSNdZ'](this['WBrqGW']);},_0x4e1c70['prototype']['YvSNdZ']=function(_0x267767){for(let _0xc81bfe=0x0,_0x213621=this['VBiOzU']['length'];_0xc81bfe<_0x213621;_0xc81bfe++){this['VBiOzU']['push'](Math['round'](Math['random']())),_0x213621=this['VBiOzU']['length'];}return _0x267767(this['VBiOzU'][0x0]);},(''+function(){return 0x0;})['indexOf']('\x0a')===-0x1&&new _0x4e1c70(a8_0x4d0e)['xDeDUg'](),_0xdacb87=a8_0x4d0e['UkveYn'](_0xdacb87),a8_0x4d0e['phurIW'][_0x4d0ed2]=_0xdacb87;}else _0xdacb87=_0x264cbf;return _0xdacb87;}const QUARTER_REGEX=/^(\d{4})-Q([1-4])$/,YEAR_REGEX=/^\d{4}$/,MONTH_REGEX=/^(\d{4})-(0[1-9]|1[0-2])$/;export function validateBoardParams(_0x3b6738){const _0x5813e6=a8_0x4d0e,_0x19bb64={'vzdYN':function(_0x432618,_0x9ea1c2){return _0x432618!==_0x9ea1c2;},'VydPv':_0x5813e6(0xcd),'ScuiN':_0x5813e6(0xbf),'jrYDt':function(_0x5bae07,_0x232495){return _0x5bae07===_0x232495;},'xxgTd':function(_0x170ef6,_0x397aa3){return _0x170ef6<=_0x397aa3;},'sWiko':'参数错误:compId\x20必须为大于\x200\x20的数字','UjKwj':'YEAR','KspHy':_0x5813e6(0xcb),'pyELm':function(_0xd557da,_0x53a535){return _0xd557da===_0x53a535;},'wQZqX':function(_0x125aec,_0x285cf3){return _0x125aec===_0x285cf3;},'cLIde':function(_0x4e78af,_0x3150bf){return _0x4e78af===_0x3150bf;},'ZeStD':_0x5813e6(0xc9),'MGKKd':function(_0x5ddd94,_0x3c40b2){return _0x5ddd94!==_0x3c40b2;},'oeBob':_0x5813e6(0xb7),'OKyRi':'参数错误:dateValue\x20必须为字符串','JrlqJ':_0x5813e6(0xb4),'yGKAq':_0x5813e6(0xd0),'SxzuQ':_0x5813e6(0xbc),'WMHDN':_0x5813e6(0xb2)};if(_0x3b6738===null||_0x3b6738===undefined||_0x19bb64['vzdYN'](typeof _0x3b6738,_0x19bb64[_0x5813e6(0xce)]))return{'valid':![],'error':_0x19bb64['ScuiN']};const _0x39527b=_0x3b6738;if(_0x39527b[_0x5813e6(0xd4)]===undefined||_0x19bb64['jrYDt'](_0x39527b[_0x5813e6(0xd4)],null))return{'valid':![],'error':_0x5813e6(0xba)};if(_0x19bb64[_0x5813e6(0xc6)](typeof _0x39527b[_0x5813e6(0xd4)],_0x5813e6(0xd7))||!Number['isFinite'](_0x39527b[_0x5813e6(0xd4)])||_0x19bb64[_0x5813e6(0xd6)](_0x39527b['compId'],0x0))return{'valid':![],'error':_0x19bb64['sWiko']};const _0x4e979b=[_0x5813e6(0xb4),_0x19bb64['UjKwj'],_0x19bb64[_0x5813e6(0xcc)]];if(_0x19bb64[_0x5813e6(0xb5)](_0x39527b[_0x5813e6(0xb1)],undefined)||_0x19bb64['wQZqX'](_0x39527b[_0x5813e6(0xb1)],null)||_0x39527b[_0x5813e6(0xb1)]==='')return{'valid':![],'error':'参数错误:dateType\x20为必填项,可选值:QUARTER\x20/\x20YEAR\x20/\x20MONTH'};if(typeof _0x39527b[_0x5813e6(0xb1)]!==_0x5813e6(0xb7)||!_0x4e979b[_0x5813e6(0xb9)](_0x39527b[_0x5813e6(0xb1)]))return{'valid':![],'error':'参数错误:dateType\x20取值必须为\x20QUARTER、YEAR\x20或\x20MONTH'};if(_0x19bb64[_0x5813e6(0xb3)](_0x39527b[_0x5813e6(0xb8)],undefined)||_0x19bb64[_0x5813e6(0xc3)](_0x39527b[_0x5813e6(0xb8)],null)||_0x19bb64[_0x5813e6(0xb5)](_0x39527b[_0x5813e6(0xb8)],''))return{'valid':![],'error':_0x19bb64[_0x5813e6(0xaf)]};if(_0x19bb64[_0x5813e6(0xc1)](typeof _0x39527b[_0x5813e6(0xb8)],_0x19bb64[_0x5813e6(0xd3)]))return{'valid':![],'error':_0x19bb64[_0x5813e6(0xb0)]};const _0x5e6806=_0x39527b['dateType'],_0x244ea3=_0x39527b[_0x5813e6(0xb8)];switch(_0x5e6806){case _0x19bb64[_0x5813e6(0xd2)]:{const _0x39afe0=_0x244ea3['match'](QUARTER_REGEX);if(!_0x39afe0)return{'valid':![],'error':_0x19bb64[_0x5813e6(0xbe)]};break;}case'YEAR':{if(!YEAR_REGEX[_0x5813e6(0xb6)](_0x244ea3))return{'valid':![],'error':_0x19bb64[_0x5813e6(0xda)]};break;}case _0x19bb64[_0x5813e6(0xcc)]:{if(!MONTH_REGEX[_0x5813e6(0xb6)](_0x244ea3))return{'valid':![],'error':_0x19bb64['WMHDN']};break;}}return{'valid':!![]};}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@jctrans/dw-sdk",
3
+ "version": "1.0.0",
4
+ "description": "JCTRans 数据仓库前端 TypeScript GraphQL SDK — Query Builder 风格,SSR 安全",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "exports": {
13
+ ".": {
14
+ "import": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ }
17
+ },
18
+ "keywords": [
19
+ "jctrans",
20
+ "data-warehouse",
21
+ "graphql",
22
+ "query-builder",
23
+ "ssr-safe",
24
+ "sdk"
25
+ ],
26
+ "license": "UNLICENSED",
27
+ "devDependencies": {
28
+ "@types/jest": "^29.5.0",
29
+ "javascript-obfuscator": "^5.4.3",
30
+ "jest": "^29.7.0",
31
+ "ts-jest": "^29.1.0",
32
+ "typescript": "^5.4.0"
33
+ },
34
+ "scripts": {
35
+ "build": "tsc",
36
+ "dev": "tsc --watch",
37
+ "typecheck": "tsc --noEmit",
38
+ "lint": "eslint src/",
39
+ "test": "jest",
40
+ "obfuscate": "echo '{}' > .obfuscator-cache.json && javascript-obfuscator dist --output dist --config .obfuscator.config.json --identifier-names-cache-path .obfuscator-cache.json",
41
+ "cleanup:maps": "find dist -name '*.js.map' -type f -delete",
42
+ "build:release": "tsc && npm run obfuscate && npm run cleanup:maps"
43
+ }
44
+ }