@reskin/core 0.0.1 → 0.0.3

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 (105) hide show
  1. package/README.md +1 -25
  2. package/bundles/reskin-core-classes.umd.js +3 -0
  3. package/bundles/reskin-core-classes.umd.js.map +1 -1
  4. package/bundles/reskin-core-directives.umd.js.map +1 -1
  5. package/bundles/reskin-core-entity-field.umd.js.map +1 -1
  6. package/bundles/reskin-core-entity-menu.umd.js.map +1 -1
  7. package/bundles/reskin-core-entity-org.umd.js +3 -3
  8. package/bundles/reskin-core-entity-org.umd.js.map +1 -1
  9. package/bundles/reskin-core-entity-scheme.umd.js.map +1 -1
  10. package/bundles/reskin-core-guards.umd.js.map +1 -1
  11. package/bundles/reskin-core-interceptors.umd.js +1 -1
  12. package/bundles/reskin-core-interceptors.umd.js.map +1 -1
  13. package/bundles/reskin-core-services.umd.js +233 -60
  14. package/bundles/reskin-core-services.umd.js.map +1 -1
  15. package/bundles/reskin-core-utils.umd.js +45 -12
  16. package/bundles/reskin-core-utils.umd.js.map +1 -1
  17. package/classes/table.helper.d.ts +0 -9
  18. package/entity/file/IUploadFileData.d.ts +1 -1
  19. package/entity/org/OrgTypeEnum.d.ts +3 -3
  20. package/esm2015/classes/public-api.js +1 -1
  21. package/esm2015/classes/table.helper.js +4 -1
  22. package/esm2015/directives/auth.directive.js +1 -1
  23. package/esm2015/directives/directives.module.js +1 -1
  24. package/esm2015/directives/public-api.js +1 -1
  25. package/esm2015/entity/Env.js +1 -1
  26. package/esm2015/entity/IPage.js +1 -1
  27. package/esm2015/entity/R.js +1 -1
  28. package/esm2015/entity/WC.js +1 -1
  29. package/esm2015/entity/dictionary/IDictionaryBaseInfo.js +1 -1
  30. package/esm2015/entity/dictionary/IDictionaryItem.js +1 -1
  31. package/esm2015/entity/dictionary/public-api.js +1 -1
  32. package/esm2015/entity/field/ColumnTypeEnum.js +1 -1
  33. package/esm2015/entity/field/ITableField.js +1 -1
  34. package/esm2015/entity/field/public-api.js +1 -1
  35. package/esm2015/entity/file/IUploadFileData.js +1 -1
  36. package/esm2015/entity/file/public-api.js +1 -1
  37. package/esm2015/entity/menu/IMenu.js +1 -1
  38. package/esm2015/entity/menu/MenuTypeEnum.js +1 -1
  39. package/esm2015/entity/menu/public-api.js +1 -1
  40. package/esm2015/entity/org/IOrgTreeNode.js +1 -1
  41. package/esm2015/entity/org/OrgTypeEnum.js +4 -4
  42. package/esm2015/entity/org/public-api.js +1 -1
  43. package/esm2015/entity/public-api.js +1 -1
  44. package/esm2015/entity/scheme/IFieldScheme.js +1 -1
  45. package/esm2015/entity/scheme/IScheme.js +1 -1
  46. package/esm2015/entity/scheme/SchemeEditTypeEnum.js +1 -1
  47. package/esm2015/entity/scheme/public-api.js +1 -1
  48. package/esm2015/entity/user/IAuth.js +1 -1
  49. package/esm2015/entity/user/IAuthAccount.js +1 -1
  50. package/esm2015/entity/user/public-api.js +1 -1
  51. package/esm2015/guards/auth.guard.js +1 -1
  52. package/esm2015/guards/public-api.js +1 -1
  53. package/esm2015/interceptors/blob.interceptor.js +1 -1
  54. package/esm2015/interceptors/cache.interceptor.js +1 -1
  55. package/esm2015/interceptors/error.interceptor.js +2 -2
  56. package/esm2015/interceptors/public-api.js +1 -1
  57. package/esm2015/interceptors/token.interceptor.js +1 -1
  58. package/esm2015/services/account.service.js +15 -2
  59. package/esm2015/services/app.config.js +27 -5
  60. package/esm2015/services/auth.service.js +11 -2
  61. package/esm2015/services/cache.http.service.js +34 -12
  62. package/esm2015/services/destroy.service.js +10 -1
  63. package/esm2015/services/dictionary.service.js +20 -13
  64. package/esm2015/services/down.file.service.js +15 -7
  65. package/esm2015/services/field.scheme.service.js +19 -6
  66. package/esm2015/services/file.service.js +54 -11
  67. package/esm2015/services/menu.service.js +20 -5
  68. package/esm2015/services/org.service.js +4 -2
  69. package/esm2015/services/public-api.js +1 -1
  70. package/esm2015/services/scheme.service.js +20 -6
  71. package/esm2015/utils/array.js +14 -3
  72. package/esm2015/utils/dom.js +13 -3
  73. package/esm2015/utils/public-api.js +1 -1
  74. package/esm2015/utils/store.js +21 -9
  75. package/fesm2015/reskin-core-classes.js +3 -0
  76. package/fesm2015/reskin-core-classes.js.map +1 -1
  77. package/fesm2015/reskin-core-directives.js.map +1 -1
  78. package/fesm2015/reskin-core-entity-field.js.map +1 -1
  79. package/fesm2015/reskin-core-entity-menu.js.map +1 -1
  80. package/fesm2015/reskin-core-entity-org.js +3 -3
  81. package/fesm2015/reskin-core-entity-org.js.map +1 -1
  82. package/fesm2015/reskin-core-entity-scheme.js.map +1 -1
  83. package/fesm2015/reskin-core-guards.js.map +1 -1
  84. package/fesm2015/reskin-core-interceptors.js +1 -1
  85. package/fesm2015/reskin-core-interceptors.js.map +1 -1
  86. package/fesm2015/reskin-core-services.js +237 -60
  87. package/fesm2015/reskin-core-services.js.map +1 -1
  88. package/fesm2015/reskin-core-utils.js +45 -12
  89. package/fesm2015/reskin-core-utils.js.map +1 -1
  90. package/package.json +1 -1
  91. package/services/account.service.d.ts +13 -1
  92. package/services/app.config.d.ts +12 -3
  93. package/services/auth.service.d.ts +2 -1
  94. package/services/cache.http.service.d.ts +30 -11
  95. package/services/destroy.service.d.ts +9 -0
  96. package/services/dictionary.service.d.ts +12 -12
  97. package/services/down.file.service.d.ts +14 -6
  98. package/services/field.scheme.service.d.ts +7 -3
  99. package/services/file.service.d.ts +45 -10
  100. package/services/menu.service.d.ts +4 -0
  101. package/services/org.service.d.ts +2 -1
  102. package/services/scheme.service.d.ts +8 -3
  103. package/utils/array.d.ts +6 -2
  104. package/utils/dom.d.ts +7 -2
  105. package/utils/store.d.ts +20 -8
@@ -18,20 +18,33 @@ class AppConfig {
18
18
  this.title = title;
19
19
  }
20
20
  /**
21
- * 加载配置
21
+ * 异步加载配置数据
22
+ * 通过调用API端点获取系统参数,解析并应用这些参数
23
+ * 如果获取参数失败或参数不正确,则抛出错误
24
+ *
25
+ * @returns {Promise<WC>} 返回配置数据的Promise
22
26
  */
23
27
  onLoad() {
24
28
  return __awaiter(this, void 0, void 0, function* () {
29
+ // 定义API请求的URL,用于获取系统参数
25
30
  const url = `api/gl-service-sys-core/v1/core/system/parameter/getOneByCode/${this.env.config.PROJECT_CONFIG_KEY}`;
31
+ // 发起API请求
26
32
  const response = yield fetch(url);
33
+ // 解析JSON响应
27
34
  const json = yield response.json();
35
+ // 检查响应码,如果不为0,则抛出错误
28
36
  if (json.code !== 0) {
29
37
  throw new Error(json.msg);
30
38
  }
39
+ // 解析并处理配置数据
31
40
  const config = json.data.SYSTEM_PARAMETER_VALUE && JSON.parse(json.data.SYSTEM_PARAMETER_VALUE);
41
+ // 将production字符串转换为布尔值
32
42
  config.production = config.production === 'true';
43
+ // 将配置数据应用到应用配置中
33
44
  AppConfig.settings = config;
45
+ // 设置项目标题
34
46
  this.title.setTitle(config.insights.PROJECT_NAME);
47
+ // 返回配置数据
35
48
  return config;
36
49
  });
37
50
  }
@@ -48,40 +61,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
48
61
  args: [RK_ENVIRONMENT]
49
62
  }] }, { type: i1.Title }]; } });
50
63
  /**
51
- * 项目初始化配置
52
- * @param environment
64
+ * 配置应用的提供者和初始化函数
65
+ *
66
+ * 此函数用于配置应用程序的提供者和服务初始化逻辑它通过依赖注入机制,
67
+ * 将环境配置和应用配置对象提供给应用,并在应用启动时执行一个加载函数
68
+ *
69
+ * @param environment 应用环境的配置对象,包含运行时的各种环境变量和配置
70
+ * @returns 返回一个包含提供者配置的数组,用于 AppModule 的提供者列表
53
71
  */
54
72
  function providerAppConfig(environment) {
55
73
  return [
74
+ // 提供环境配置的提供者,将环境对象作为值提供给 RK_ENVIRONMENT 令牌
56
75
  { provide: RK_ENVIRONMENT, useValue: environment },
76
+ // 将 AppConfig 服务本身作为提供者
57
77
  AppConfig,
78
+ // 配置 APP_INITIALIZER 提供者,使用工厂函数在应用启动时调用 appConfig 的 onLoad 方法
79
+ // 这允许在应用启动完成后执行一些初始化逻辑
58
80
  {
59
81
  provide: APP_INITIALIZER,
60
82
  useFactory: (appConfig) => () => appConfig.onLoad(),
61
83
  deps: [AppConfig],
62
- multi: true,
84
+ multi: true, // 标记此初始化函数为多值,可以有多个初始化函数
63
85
  },
64
86
  ];
65
87
  }
66
88
 
89
+ // RkAuthService 提供了与用户认证相关的服务
67
90
  class RkAuthService {
91
+ // 构造函数,注入环境配置和HTTP客户端
68
92
  constructor(env, http) {
69
93
  this.env = env;
70
94
  this.http = http;
95
+ // auth 存储认证信息
71
96
  this.auth = new Store('auth', {});
72
97
  }
73
98
  /**
74
99
  * 系统登录
75
100
  * @param data 验证信息
76
- * @returns
101
+ * @returns 登录结果
77
102
  */
78
103
  onLogin(data) {
79
104
  const url = 'api/gl-service-sys-user/v1/user/system/auth/login';
105
+ // 设置请求头,包含项目类型和无令牌控制信息
80
106
  const headers = new HttpHeaders({
81
107
  'ProjectNo': this.env.config.PROJECT_TYPE,
82
108
  'Token-Control': 'no-token',
83
109
  });
110
+ // 发送POST请求,并在成功后处理响应
84
111
  return this.http.post(url, { data }, { headers }).pipe(tap((json) => {
112
+ // 如果代码为0,表示登录成功,存储认证信息
85
113
  if (json.code === 0) {
86
114
  this.auth.set(json.data);
87
115
  }
@@ -92,12 +120,15 @@ class RkAuthService {
92
120
  */
93
121
  onLogout() {
94
122
  const url = 'api/gl-service-sys-user/v1/user/system/auth/logoutByAuthId';
123
+ // 发送POST请求,使用当前的AUTH_ID进行注销
95
124
  return this.http.post(url, { AUTH_ID: this.token.id });
96
125
  }
97
126
  /**
98
127
  * 获得 token
128
+ * @returns 当前用户的认证信息
99
129
  */
100
130
  get token() {
131
+ // 获取存储的认证信息
101
132
  return this.auth.get();
102
133
  }
103
134
  }
@@ -114,13 +145,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
114
145
  }] }, { type: i1$1.HttpClient }]; } });
115
146
 
116
147
  class RkAccountService {
117
- constructor(http, auth) {
148
+ constructor(http, // HttpClient实例用于发送HTTP请求
149
+ auth) {
118
150
  this.http = http;
119
151
  this.auth = auth;
152
+ // 定义一个Store实例用于存储用户认证信息
120
153
  this.account = new Store('account', {});
121
154
  }
122
155
  /**
123
156
  * 加载人员权限
157
+ *
158
+ * 本方法通过发送HTTP POST请求来加载当前认证用户的权限数据,
159
+ * 如果请求成功,将权限数据存储在account Store实例中
124
160
  */
125
161
  onLoadAuth() {
126
162
  var _a;
@@ -133,24 +169,32 @@ class RkAccountService {
133
169
  }
134
170
  /**
135
171
  * 获得账号基本信息
172
+ *
173
+ * @returns {IAccountProfile} 返回当前账号的基本信息对象
136
174
  */
137
175
  get userInfo() {
138
176
  return this.account.get().UserInfo;
139
177
  }
140
178
  /**
141
179
  * 获得账号人员库权限
180
+ *
181
+ * @returns {IAuthPersonnelPool} 返回当前账号的人员库权限对象
142
182
  */
143
183
  get personnelPool() {
144
184
  return this.account.get().AuthPersonnelPool;
145
185
  }
146
186
  /**
147
187
  * 获得账号业务权限
188
+ *
189
+ * @returns {IAuthWorkflow} 返回当前账号的业务权限对象
148
190
  */
149
191
  get workflowAuth() {
150
192
  return this.account.get().AuthWfId;
151
193
  }
152
194
  /**
153
195
  * 获得账号机构分组权限
196
+ *
197
+ * @returns {Array<IAuthOrgGroup>} 返回当前账号的机构分组权限数组
154
198
  */
155
199
  get authOrgGroup() {
156
200
  return this.account.get().AuthOrgGroup;
@@ -170,29 +214,42 @@ class RkCacheHttpService {
170
214
  this.cache = new Map();
171
215
  }
172
216
  /**
173
- * 获得已缓存的请求
174
- * @param url GET请求地址
217
+ * 从缓存中获取指定URL的HTTP响应
218
+ *
219
+ * 此方法尝试从缓存中获取与指定URL相关的HTTP响应如果缓存中存在相应的响应,则返回该响应,否则返回未定义(undefined)
220
+ * 它避免了不必要的网络请求,从而提高应用的性能
221
+ *
222
+ * @param url 要从缓存中获取的资源的URL
223
+ * @returns 返回一个Observable对象,该对象发出未知类型的HTTP事件,或者在缓存中未找到时返回未定义
175
224
  */
176
225
  get(url) {
177
226
  return this.cache.get(url);
178
227
  }
179
228
  /**
180
- * 缓存请求
181
- * @param url GET请求地址
182
- * @param response 响应内容
229
+ * 将HTTP响应缓存到指定的URL
230
+ *
231
+ * 此方法用于将给定的HTTP响应Observable对象与特定的URL关联,并存储在缓存中这样做的目的是为了在将来对同一URL的请求可以直接从缓存中获取响应,而不需要再次发送HTTP请求,从而提高应用的性能和响应速度
232
+ *
233
+ * @param url 要缓存响应的URL
234
+ * @param response HTTP响应的Observable对象,包含响应数据和状态
183
235
  */
184
236
  set(url, response) {
185
237
  this.cache.set(url, response);
186
238
  }
187
239
  /**
188
- * 删除指定已缓存的请求
189
- * @param url GET请求地址
240
+ * 删除指定的URL对应的缓存
241
+ *
242
+ * 本方法通过URL作为键,从缓存中删除对应的缓存项它使用了`cache.delete`方法来实现缓存的删除操作
243
+ *
244
+ * @param url {string} - 需要删除缓存的URL地址
190
245
  */
191
246
  delete(url) {
192
247
  this.cache.delete(url);
193
248
  }
194
249
  /**
195
- * 删除所有已缓存的请求
250
+ * 清除缓存
251
+ *
252
+ * 该方法清空当前实例的缓存
196
253
  */
197
254
  clear() {
198
255
  this.cache.clear();
@@ -207,37 +264,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
207
264
  }]
208
265
  }] });
209
266
  /**
210
- * 设置为缓存请求
267
+ * 生成带有缓存策略的HTTP请求模板
211
268
  * 使用方法:http.get(...CacheHttpTemplate`api/response.json`)
212
- * @param urls 请求地址
213
- * @param params 模板参数
269
+ *
270
+ * 该函数用于创建一个带有特定缓存策略的HTTP请求URL和相关头部信息它通过模板字符串和参数数组,
271
+ * 构建一个最终的URL,并自动添加一个名为'Cache-Map'的自定义头部,其值为'Storage'
272
+ *
273
+ * @param urls 模板字符串数组,通常用于构建URL的一部分
274
+ * @param params 任意数量的参数,用于与模板字符串一起构建最终的URL
275
+ * @returns 返回一个元组,第一个元素是构建好的URL字符串,第二个元素是一个对象,
276
+ * 包含了HTTP请求的头部信息,目前只包含一个自定义的'Cache-Map'头部
214
277
  */
215
278
  function CacheHttpTemplate(urls, ...params) {
279
+ // 初始化URL为模板字符串数组的第一个元素
216
280
  let [url] = urls;
281
+ // 如果参数数组非空,则使用模板字符串和参数数组构建最终的URL
217
282
  if (params.length > 0) {
218
283
  url = String.raw(urls, ...params);
219
284
  }
285
+ // 返回构建好的URL和带有缓存策略的头部信息
220
286
  return [url, { headers: new HttpHeaders({ 'Cache-Map': 'Storage' }) }];
221
287
  }
222
288
 
289
+ // 通过@Injectable装饰器指定RkMenuService可以被Angular的依赖注入系统提供和使用
290
+ // RkMenuService类用于处理系统导航菜单相关的业务逻辑
223
291
  class RkMenuService {
292
+ // 构造函数,注入HttpClient实例用于发送HTTP请求
224
293
  constructor(http) {
225
294
  this.http = http;
295
+ // AppConfig.settings存储了应用程序的配置信息
226
296
  this.appSettings = AppConfig.settings;
227
297
  }
228
298
  /**
229
299
  * 获得系统导航列表
300
+ *
301
+ * 通过HTTP GET请求从后端获取系统导航数据,返回一个Observable对象
302
+ *
303
+ * @returns Observable<R<Array<IMenu>>> 包含导航菜单数据的Observable对象
230
304
  */
231
305
  requestData() {
306
+ // 定义请求的URL
232
307
  const url = 'api/gl-service-sys-core/v1/core/system/resource/tree/selectListNav';
308
+ // 发送HTTP GET请求,并使用tap操作符对返回的数据进行处理
233
309
  return this.http.get(...CacheHttpTemplate `${url}/${this.appSettings.servers.RESOURCE_GROUP_ID}`).pipe(tap((json) => {
310
+ // 检查返回的状态码,如果不为0,则不处理
234
311
  if (json.code !== 0) {
235
- throw new Error(`获得系统导航列表 ${url} 出现错误: ${json.msg}`);
312
+ return;
236
313
  }
314
+ // 提取导航菜单数据
237
315
  const menus = json.data;
238
- menus.forEach((menu) => {
239
- menu.children = menus.filter((v) => menu.SYSTEM_RESOURCE_TREE_ID === v.SYS_PARENT) || [];
240
- });
316
+ // 如果导航菜单为空,输出错误信息
317
+ if (menus.length) { // 处理返回的菜单数据,为每个菜单添加子菜单属性
318
+ menus.forEach((menu) => {
319
+ menu.children = menus.filter((v) => menu.SYSTEM_RESOURCE_TREE_ID === v.SYS_PARENT) || [];
320
+ });
321
+ }
241
322
  }));
242
323
  }
243
324
  }
@@ -255,9 +336,12 @@ class RkDownFileService {
255
336
  this.http = http;
256
337
  }
257
338
  /**
258
- * 使用GET方法下载文件
259
- * @param url 请求链接; url可以传递自定义文件名优先级最高;如:api/file/down?fileName=身份证.jpg
260
- * @param params 请求参数
339
+ * 使用HTTP GET方法发送请求,以获取Blob类型的响应
340
+ * 此方法主要用于处理需要二进制响应的请求,如文件下载等
341
+ *
342
+ * @param url 请求的URL,必须提供,url可以传递自定义文件名优先级最高;如:api/file/down?fileName=身份证.jpg
343
+ * @param params 可选的查询参数,将作为URL查询字符串发送
344
+ * @returns 返回一个Observable,它发出HttpResponse对象,包含Blob类型的响应体
261
345
  */
262
346
  get(url, params) {
263
347
  return this.http
@@ -265,9 +349,14 @@ class RkDownFileService {
265
349
  .pipe(tap((response) => this.handleResponse(response, url)));
266
350
  }
267
351
  /**
268
- * 使用POST方法下载文件
269
- * @param url 请求链接; url可以传递自定义文件名优先级最高;如:api/file/down?fileName=身份证.jpg
270
- * @param params 请求参数
352
+ * 发起POST请求下载数据
353
+ *
354
+ * 本函数用于向指定URL发起POST请求,并期望返回二进制数据(如文件等)
355
+ * 使用场景包括但不限于文件下载等需要获取原始二进制数据的操作
356
+ *
357
+ * @param url 请求的URL,必须提供,url可以传递自定义文件名优先级最高;如:api/file/down?fileName=身份证.jpg
358
+ * @param params 请求的参数,可以是任意类型的数据,会作为请求体发送
359
+ * @returns 返回一个Observable,其类型参数为HttpResponse<Blob>,表示服务器的响应
271
360
  */
272
361
  post(url, params) {
273
362
  return this.http
@@ -330,9 +419,15 @@ class RkFileService {
330
419
  this.http = http;
331
420
  }
332
421
  /**
333
- * 获得人员照片静态路径
334
- * @param fileId 文件编码
335
- * @param fileName 文件名称
422
+ * 构建静态人员照片的URL
423
+ *
424
+ * 该方法用于根据文件ID构建访问静态图片的URL如果提供了文件名,
425
+ * 则将其作为查询参数附加到URL上这个函数主要用于前端展示静态图片,
426
+ * 通过传入文件的唯一标识符(fileId)和可选的文件名来确保图片的正确加载
427
+ *
428
+ * @param fileId 图片文件的唯一标识符,用于定位具体的图片资源
429
+ * @param fileName 可选参数,图片文件的名称如果提供,将作为查询参数附加到URL上
430
+ * @returns 返回构建的静态图片URL
336
431
  */
337
432
  staticPhotoUrl(fileId, fileName) {
338
433
  let url = `api/gl-file-service/static/photo/${fileId}`;
@@ -342,31 +437,68 @@ class RkFileService {
342
437
  return url;
343
438
  }
344
439
  /**
345
- * 上传人员照片
346
- * @param data 文件
440
+ * 上传图片
441
+ *
442
+ * 该方法用于将图片文件上传到服务器它封装了HTTP POST请求,发送FormData对象到指定的API端点
443
+ * 主要用于用户头像的上传操作
444
+ *
445
+ * @param data FormData对象,包含了需要上传的文件以及其他可能的表单数据
446
+ * @returns 返回一个Observable对象,其类型参数为R<IUploadFileData>,表示上传操作的结果
347
447
  */
348
448
  photoUpload(data) {
349
449
  const url = 'api/gl-file-service/photo/upload';
350
450
  return this.http.post(url, data);
351
451
  }
352
452
  /**
353
- * 获得附件静态路径
354
- * @param fileId 文件编码
355
- * @param fileName 文件名称
453
+ * 构建静态文件的URL地址
454
+ *
455
+ * 本函数用于根据文件ID和可选的文件名构建访问静态文件的URL地址
456
+ * 如果提供了文件名,将会将其编码并附加到URL上,以便在访问时可以直接下载文件
457
+ *
458
+ * @param fileId 文件的唯一标识符,用于定位具体文件
459
+ * @param fileName 可选参数,文件的名称如果提供此参数,将会在URL中进行编码后附加
460
+ * @returns 返回构建好的静态文件URL地址
356
461
  */
357
462
  staticFileUrl(fileId, fileName) {
463
+ // 初始化URL,指向文件服务的静态附件访问路径
358
464
  let url = `api/gl-file-service/static/attachment/${fileId}`;
465
+ // 如果提供了文件名,则进行编码并追加到URL中
359
466
  if (fileName) {
360
467
  url += `?fileName=${encodeURI(fileName)}`;
361
468
  }
469
+ // 返回最终构建好的URL
362
470
  return url;
363
471
  }
364
472
  /**
365
- * 上传附件
366
- * @param data 文件
473
+ * 上传文件
474
+ *
475
+ * 此方法用于将文件数据上传到服务器它封装了HTTP POST请求,用于文件上传服务
476
+ * 使用FormData对象来构建需要上传的文件数据
477
+ *
478
+ * @param data FormData对象,包含了需要上传的文件数据
479
+ * @returns 返回一个Observable对象,它发出包含上传结果数据的动作
367
480
  */
368
481
  fileUpload(data) {
482
+ // 定义上传文件的API URL
369
483
  const url = 'api/gl-file-service/attachment/upload';
484
+ // 调用HTTP POST方法进行文件上传
485
+ return this.http.post(url, data);
486
+ }
487
+ /**
488
+ * 批量上传文件
489
+ *
490
+ * 该方法负责将一组文件作为FormData发送到服务器进行批量上传
491
+ * 主要用于处理大量文件上传的情况,提高效率和用户体验
492
+ *
493
+ * @param data FormData对象,包含了需要上传的文件数据
494
+ * 这个对象通常由前端表单生成,包含了多个文件
495
+ * @returns 返回一个Observable对象,它发出一个结果类型为R<IUploadFileData[]>的响应
496
+ * 这个响应包含了上传结果的详细信息,包括成功与否,文件信息等
497
+ *
498
+ * 注意:该方法依赖于后端提供的文件上传服务,URL路径为'api/gl-file-service/attachment/batchUpload'
499
+ */
500
+ batchUpload(data) {
501
+ const url = 'api/gl-file-service/attachment/batchUpload';
370
502
  return this.http.post(url, data);
371
503
  }
372
504
  }
@@ -379,6 +511,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
379
511
  }]
380
512
  }], ctorParameters: function () { return [{ type: i1$1.HttpClient }]; } });
381
513
 
514
+ // 组织机构服务,提供获取单位列表、搜索机构和获取所有父节点的功能
382
515
  class RkOrgService {
383
516
  constructor(http) {
384
517
  this.http = http;
@@ -406,7 +539,8 @@ class RkOrgService {
406
539
  }
407
540
  /**
408
541
  * 通过单位编码获得所有父节点
409
- * @param id
542
+ * @param id 单位编码
543
+ * @returns 父节点列表
410
544
  */
411
545
  requestParentList(id) {
412
546
  const url = 'api/gl-service-data/v1/data/unit/org/selectListAllParentById';
@@ -422,15 +556,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
422
556
  }]
423
557
  }], ctorParameters: function () { return [{ type: i1$1.HttpClient }]; } });
424
558
 
559
+ // 提供字典服务,用于管理和查询字典数据
425
560
  class RkDictionaryService {
426
561
  constructor(http) {
427
562
  this.http = http;
563
+ // 存储字典常用项的缓存,有效期为一周
428
564
  this.useItems = new Store('dictionary_use_items', {}, { expires: 1000 * 60 * 60 * 24 * 7 });
429
565
  }
430
566
  /**
431
567
  * 通过字典编码获得常用项
432
568
  * @param code 字典编码
433
- * @returns 常用项
569
+ * @returns 常用项数组
434
570
  */
435
571
  getUseItems(code) {
436
572
  return this.useItems.get()[code] || [];
@@ -438,20 +574,24 @@ class RkDictionaryService {
438
574
  /**
439
575
  * 通过字典编码设置常用项
440
576
  * @param code 字典编码
441
- * @param item 常用项
577
+ * @param item 常用项对象
442
578
  */
443
579
  setUseItems(code, item) {
444
580
  const data = this.useItems.get();
581
+ // 如果字典编码不存在,则创建一个新数组
445
582
  if (!data[code]) {
446
583
  data[code] = [item];
447
584
  }
448
585
  else {
586
+ // 如果常用项已存在,则不进行重复添加
449
587
  if (data[code].find((v) => v.DICTIONARY_ITEM_CODE === item.DICTIONARY_ITEM_CODE)) {
450
588
  return;
451
589
  }
590
+ // 如果常用项数组已满(超过9个),则移除最后一个元素
452
591
  if (data[code].length > 9) {
453
592
  data[code].pop();
454
593
  }
594
+ // 将新的常用项添加到数组开头
455
595
  data[code].unshift(item);
456
596
  }
457
597
  this.useItems.set(data);
@@ -459,39 +599,40 @@ class RkDictionaryService {
459
599
  /**
460
600
  * 通过字典编码获得字典基本信息
461
601
  * @param code 字典编码
462
- * @returns 字典基本信息
602
+ * @returns 字典基本信息的Observable对象
463
603
  */
464
604
  getBaseInfo(code) {
465
605
  const url = `api/gl-service-sys-core/v1/core/system/dictionary/selectOneByDictionaryCode`;
466
606
  return this.http.get(...CacheHttpTemplate `${url}/${this.codeReplace(code)}`).pipe(filter((json) => json.code === 0), map((json) => json.data));
467
607
  }
468
608
  /**
469
- * 通过字典编码获得获得字典项
609
+ * 通过字典编码获得字典项列表
470
610
  * @param code 字典编码
471
- * @returns 字典项列表
611
+ * @returns 字典项列表的Observable对象
472
612
  */
473
613
  getData(code) {
474
614
  const url = `api/gl-service-sys-core/v1/core/system/dictionary/item/selectListByDictionaryCode`;
475
615
  return this.http.get(...CacheHttpTemplate `${url}/${this.codeReplace(code)}`).pipe(filter((json) => json.code === 0), map((json) => json.data));
476
616
  }
477
617
  /**
478
- * 通过父节点获得字典项编码
618
+ * 通过父节点获得字典项列表
479
619
  * @param code 字典编码
480
- * @param parentId 父节点编码
481
- * @returns 字典项列表
620
+ * @param parentId 父节点编码,默认为根节点
621
+ * @returns 字典项列表的Observable对象
482
622
  */
483
623
  getChildData(code, parentId = '-1') {
484
624
  const url = `api/gl-service-sys-core/v1/core/system/dictionary/item/selectListByDictionaryCode`;
485
625
  return this.http.post(url, { DICTIONARY_CODE: code, SYS_PARENT: parentId }).pipe(filter((json) => json.code === 0), map((json) => json.data));
486
626
  }
627
+ // 私有方法,用于替换字典编码中的特殊字符
487
628
  codeReplace(code) {
488
629
  return code.replace(/\//g, '_');
489
630
  }
490
631
  /**
491
- * 通过字典编码获得获得字典项
632
+ * 根据关键字搜索字典项
492
633
  * @param code 字典编码
493
634
  * @param keyword 关键字
494
- * @returns 字典项列表
635
+ * @returns 最多10个匹配的字典项列表的Observable对象
495
636
  */
496
637
  requestSearchData(code, keyword) {
497
638
  const url = 'api/gl-service-sys-core/v1/core/system/dictionary/item/selectListByQuery';
@@ -504,10 +645,10 @@ class RkDictionaryService {
504
645
  }))));
505
646
  }
506
647
  /**
507
- * 获得字典项的所有父节点
648
+ * 获取字典项的所有父节点
508
649
  * @param code 字典编码
509
650
  * @param id 字典项编码
510
- * @returns 字典项列表
651
+ * @returns 父节点列表的Observable对象
511
652
  */
512
653
  requestParentList(code, id) {
513
654
  const url = 'api/gl-service-sys-core/v1/core/system/dictionary/item/selectListInfoAllParentByCode';
@@ -529,20 +670,34 @@ class RkSchemeService {
529
670
  this.appSettings = AppConfig.settings;
530
671
  }
531
672
  /**
532
- * 通过界面方案标识符获得界面方案内容
533
- * @param permission 界面方案标识符
534
- * @returns 界面方案
673
+ * 根据权限标识符获取界面方案内容
674
+ *
675
+ * 此方法主要用于根据提供的权限标识符,从后端服务中获取相应的界面方案内容它首先检查是否设置了应用设置中的区域代码,
676
+ * 如果设置了,则将其前缀到权限标识符上,然后构造请求的URL,并调用HTTP服务进行获取在处理HTTP响应时,
677
+ * 它会检查返回的状态码,并在状态码不为0(成功)时抛出错误,否则返回界面方案数据
678
+ *
679
+ * @param permission 权限标识符,用于获取相应的界面方案
680
+ * @returns 返回一个Observable,其中包含界面方案数据
535
681
  */
536
682
  getData(permission) {
683
+ // 检查应用设置中是否设置了区域代码,如果设置了,则将其前缀到权限标识符上
537
684
  if (this.appSettings && this.appSettings.servers.AREA_CODE) {
538
685
  permission = `${this.appSettings.servers.AREA_CODE}_${permission}`;
539
686
  }
687
+ // 构造请求的URL
540
688
  const url = `api/gl-service-sys-core/v1/core/system/scheme/selectSchemeByPermission`;
541
- return this.http.get(...CacheHttpTemplate `${url}/${permission}`).pipe(tap((json) => {
689
+ // 调用HTTP服务进行GET请求,并对返回的Observable进行处理
690
+ return this.http.get(...CacheHttpTemplate `${url}/${permission}`).pipe(
691
+ // 检查返回的状态码,如果不为0,则抛出错误
692
+ tap((json) => {
542
693
  if (json.code !== 0) {
543
694
  throw new Error(`通过界面方案标识符获得界面方案内容 ${url} 出现错误: ${json.msg}`);
544
695
  }
545
- }), filter((json) => json.code === 0), map((json) => json.data));
696
+ }),
697
+ // 过滤出状态码为0的响应
698
+ filter((json) => json.code === 0),
699
+ // 提取并返回响应中的数据部分
700
+ map((json) => json.data));
546
701
  }
547
702
  }
548
703
  RkSchemeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkSchemeService, deps: [{ token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -560,20 +715,33 @@ class RkFieldSchemeService {
560
715
  this.appSettings = AppConfig.settings;
561
716
  }
562
717
  /**
563
- * 通过字段方案标识符获得字段方案内容
564
- * @param permission 字段方案标识符
565
- * @returns 字段方案
718
+ * 根据权限标识符获取字段方案
719
+ *
720
+ * 此方法主要用于根据提供的权限标识符,从后端服务中获取相应的字段方案
721
+ * 如果应用设置中包含了地区代码,则会将其前缀添加到权限标识符上
722
+ *
723
+ * @param permission 字段方案的权限标识符,用于定位特定的字段方案
724
+ * @returns 返回一个Observable,其中包含字段方案的数据
566
725
  */
567
726
  getData(permission) {
727
+ // 检查应用设置中是否提供了地区代码,如果有,则将其添加到权限标识符的前面
568
728
  if (this.appSettings && this.appSettings.servers.AREA_CODE) {
569
729
  permission = `${this.appSettings.servers.AREA_CODE}_${permission}`;
570
730
  }
731
+ // 定义请求的URL,用于从后端服务获取字段方案
571
732
  const url = `api/gl-service-sys-core/v1/core/system/field/scheme/selectSchemeByIdentifier`;
572
- return this.http.get(...CacheHttpTemplate `${url}/${permission}`).pipe(tap((json) => {
733
+ // 发起HTTP GET请求,使用缓存HTTP模板,并对返回的结果进行处理
734
+ return this.http.get(...CacheHttpTemplate `${url}/${permission}`).pipe(
735
+ // 如果返回码不为0,则抛出错误,提示获取字段方案内容时出现错误
736
+ tap((json) => {
573
737
  if (json.code !== 0) {
574
738
  throw new Error(`通过字段方案标识符获得字段方案内容 ${url} 出现错误: ${json.msg}`);
575
739
  }
576
- }), filter((json) => json.code === 0), map((json) => json.data));
740
+ }),
741
+ // 过滤出返回码为0的结果,即操作成功的数据
742
+ filter((json) => json.code === 0),
743
+ // 提取结果数据中的字段方案内容
744
+ map((json) => json.data));
577
745
  }
578
746
  }
579
747
  RkFieldSchemeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkFieldSchemeService, deps: [{ token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -586,6 +754,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
586
754
  }], ctorParameters: function () { return [{ type: i1$1.HttpClient }]; } });
587
755
 
588
756
  class RkDestroyService extends Subject {
757
+ /**
758
+ * 在组件销毁时调用的方法
759
+ *
760
+ * 该方法主要用于清理操作,确保在组件被销毁前完成所有的清理工作
761
+ * 首先,调用`this.next()`方法,用于发送一个通知或执行某些操作,以便在组件销毁前进行必要的处理
762
+ * 然后,调用`this.complete()`方法,表示已完成所有必要的清理操作,确保资源被正确释放
763
+ *
764
+ * @returns void - 该方法没有返回值
765
+ */
589
766
  ngOnDestroy() {
590
767
  this.next();
591
768
  this.complete();