@reskin/core 0.0.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.
- package/README.md +25 -0
- package/bundles/reskin-core-classes.umd.js +48 -0
- package/bundles/reskin-core-classes.umd.js.map +1 -0
- package/bundles/reskin-core-directives.umd.js +147 -0
- package/bundles/reskin-core-directives.umd.js.map +1 -0
- package/bundles/reskin-core-entity-dictionary.umd.js +11 -0
- package/bundles/reskin-core-entity-dictionary.umd.js.map +1 -0
- package/bundles/reskin-core-entity-field.umd.js +49 -0
- package/bundles/reskin-core-entity-field.umd.js.map +1 -0
- package/bundles/reskin-core-entity-file.umd.js +11 -0
- package/bundles/reskin-core-entity-file.umd.js.map +1 -0
- package/bundles/reskin-core-entity-menu.umd.js +40 -0
- package/bundles/reskin-core-entity-menu.umd.js.map +1 -0
- package/bundles/reskin-core-entity-org.umd.js +50 -0
- package/bundles/reskin-core-entity-org.umd.js.map +1 -0
- package/bundles/reskin-core-entity-scheme.umd.js +63 -0
- package/bundles/reskin-core-entity-scheme.umd.js.map +1 -0
- package/bundles/reskin-core-entity-user.umd.js +11 -0
- package/bundles/reskin-core-entity-user.umd.js.map +1 -0
- package/bundles/reskin-core-entity.umd.js +11 -0
- package/bundles/reskin-core-entity.umd.js.map +1 -0
- package/bundles/reskin-core-guards.umd.js +89 -0
- package/bundles/reskin-core-guards.umd.js.map +1 -0
- package/bundles/reskin-core-interceptors.umd.js +702 -0
- package/bundles/reskin-core-interceptors.umd.js.map +1 -0
- package/bundles/reskin-core-services.umd.js +1188 -0
- package/bundles/reskin-core-services.umd.js.map +1 -0
- package/bundles/reskin-core-utils.umd.js +130 -0
- package/bundles/reskin-core-utils.umd.js.map +1 -0
- package/bundles/reskin-core.umd.js +13 -0
- package/bundles/reskin-core.umd.js.map +1 -0
- package/classes/package.json +10 -0
- package/classes/public-api.d.ts +1 -0
- package/classes/reskin-core-classes.d.ts +5 -0
- package/classes/table.helper.d.ts +23 -0
- package/directives/auth.directive.d.ts +27 -0
- package/directives/directives.module.d.ts +7 -0
- package/directives/package.json +10 -0
- package/directives/public-api.d.ts +2 -0
- package/directives/reskin-core-directives.d.ts +5 -0
- package/entity/Env.d.ts +66 -0
- package/entity/IPage.d.ts +35 -0
- package/entity/R.d.ts +25 -0
- package/entity/WC.d.ts +51 -0
- package/entity/dictionary/IDictionaryBaseInfo.d.ts +29 -0
- package/entity/dictionary/IDictionaryItem.d.ts +50 -0
- package/entity/dictionary/package.json +10 -0
- package/entity/dictionary/public-api.d.ts +2 -0
- package/entity/dictionary/reskin-core-entity-dictionary.d.ts +5 -0
- package/entity/field/ColumnTypeEnum.d.ts +33 -0
- package/entity/field/ITableField.d.ts +27 -0
- package/entity/field/package.json +10 -0
- package/entity/field/public-api.d.ts +2 -0
- package/entity/field/reskin-core-entity-field.d.ts +5 -0
- package/entity/file/IUploadFileData.d.ts +25 -0
- package/entity/file/package.json +10 -0
- package/entity/file/public-api.d.ts +1 -0
- package/entity/file/reskin-core-entity-file.d.ts +5 -0
- package/entity/menu/IMenu.d.ts +57 -0
- package/entity/menu/MenuTypeEnum.d.ts +24 -0
- package/entity/menu/package.json +10 -0
- package/entity/menu/public-api.d.ts +2 -0
- package/entity/menu/reskin-core-entity-menu.d.ts +5 -0
- package/entity/org/IOrgTreeNode.d.ts +58 -0
- package/entity/org/OrgTypeEnum.d.ts +31 -0
- package/entity/org/package.json +10 -0
- package/entity/org/public-api.d.ts +2 -0
- package/entity/org/reskin-core-entity-org.d.ts +5 -0
- package/entity/package.json +10 -0
- package/entity/public-api.d.ts +4 -0
- package/entity/reskin-core-entity.d.ts +5 -0
- package/entity/scheme/IFieldScheme.d.ts +97 -0
- package/entity/scheme/IScheme.d.ts +200 -0
- package/entity/scheme/SchemeEditTypeEnum.d.ts +25 -0
- package/entity/scheme/package.json +10 -0
- package/entity/scheme/public-api.d.ts +3 -0
- package/entity/scheme/reskin-core-entity-scheme.d.ts +5 -0
- package/entity/user/IAuth.d.ts +13 -0
- package/entity/user/IAuthAccount.d.ts +126 -0
- package/entity/user/package.json +10 -0
- package/entity/user/public-api.d.ts +2 -0
- package/entity/user/reskin-core-entity-user.d.ts +5 -0
- package/esm2015/classes/public-api.js +2 -0
- package/esm2015/classes/reskin-core-classes.js +5 -0
- package/esm2015/classes/table.helper.js +32 -0
- package/esm2015/directives/auth.directive.js +83 -0
- package/esm2015/directives/directives.module.js +16 -0
- package/esm2015/directives/public-api.js +3 -0
- package/esm2015/directives/reskin-core-directives.js +5 -0
- package/esm2015/entity/Env.js +2 -0
- package/esm2015/entity/IPage.js +2 -0
- package/esm2015/entity/R.js +2 -0
- package/esm2015/entity/WC.js +2 -0
- package/esm2015/entity/dictionary/IDictionaryBaseInfo.js +2 -0
- package/esm2015/entity/dictionary/IDictionaryItem.js +2 -0
- package/esm2015/entity/dictionary/public-api.js +3 -0
- package/esm2015/entity/dictionary/reskin-core-entity-dictionary.js +5 -0
- package/esm2015/entity/field/ColumnTypeEnum.js +35 -0
- package/esm2015/entity/field/ITableField.js +2 -0
- package/esm2015/entity/field/public-api.js +3 -0
- package/esm2015/entity/field/reskin-core-entity-field.js +5 -0
- package/esm2015/entity/file/IUploadFileData.js +2 -0
- package/esm2015/entity/file/public-api.js +2 -0
- package/esm2015/entity/file/reskin-core-entity-file.js +5 -0
- package/esm2015/entity/menu/IMenu.js +2 -0
- package/esm2015/entity/menu/MenuTypeEnum.js +26 -0
- package/esm2015/entity/menu/public-api.js +3 -0
- package/esm2015/entity/menu/reskin-core-entity-menu.js +5 -0
- package/esm2015/entity/org/IOrgTreeNode.js +2 -0
- package/esm2015/entity/org/OrgTypeEnum.js +33 -0
- package/esm2015/entity/org/public-api.js +3 -0
- package/esm2015/entity/org/reskin-core-entity-org.js +5 -0
- package/esm2015/entity/public-api.js +5 -0
- package/esm2015/entity/reskin-core-entity.js +5 -0
- package/esm2015/entity/scheme/IFieldScheme.js +2 -0
- package/esm2015/entity/scheme/IScheme.js +22 -0
- package/esm2015/entity/scheme/SchemeEditTypeEnum.js +27 -0
- package/esm2015/entity/scheme/public-api.js +4 -0
- package/esm2015/entity/scheme/reskin-core-entity-scheme.js +5 -0
- package/esm2015/entity/user/IAuth.js +2 -0
- package/esm2015/entity/user/IAuthAccount.js +2 -0
- package/esm2015/entity/user/public-api.js +3 -0
- package/esm2015/entity/user/reskin-core-entity-user.js +5 -0
- package/esm2015/guards/auth.guard.js +53 -0
- package/esm2015/guards/public-api.js +2 -0
- package/esm2015/guards/reskin-core-guards.js +5 -0
- package/esm2015/interceptors/blob.interceptor.js +66 -0
- package/esm2015/interceptors/cache.interceptor.js +36 -0
- package/esm2015/interceptors/error.interceptor.js +35 -0
- package/esm2015/interceptors/public-api.js +5 -0
- package/esm2015/interceptors/reskin-core-interceptors.js +5 -0
- package/esm2015/interceptors/token.interceptor.js +48 -0
- package/esm2015/public-api.js +2 -0
- package/esm2015/reskin-core.js +5 -0
- package/esm2015/services/account.service.js +58 -0
- package/esm2015/services/app.config.js +60 -0
- package/esm2015/services/auth.service.js +56 -0
- package/esm2015/services/cache.http.service.js +58 -0
- package/esm2015/services/destroy.service.js +15 -0
- package/esm2015/services/dictionary.service.js +107 -0
- package/esm2015/services/down.file.service.js +79 -0
- package/esm2015/services/field.scheme.service.js +37 -0
- package/esm2015/services/file.service.js +57 -0
- package/esm2015/services/menu.service.js +36 -0
- package/esm2015/services/org.service.js +46 -0
- package/esm2015/services/public-api.js +13 -0
- package/esm2015/services/reskin-core-services.js +5 -0
- package/esm2015/services/scheme.service.js +37 -0
- package/esm2015/utils/array.js +29 -0
- package/esm2015/utils/dom.js +18 -0
- package/esm2015/utils/public-api.js +4 -0
- package/esm2015/utils/reskin-core-utils.js +5 -0
- package/esm2015/utils/store.js +64 -0
- package/fesm2015/reskin-core-classes.js +39 -0
- package/fesm2015/reskin-core-classes.js.map +1 -0
- package/fesm2015/reskin-core-directives.js +103 -0
- package/fesm2015/reskin-core-directives.js.map +1 -0
- package/fesm2015/reskin-core-entity-dictionary.js +4 -0
- package/fesm2015/reskin-core-entity-dictionary.js.map +1 -0
- package/fesm2015/reskin-core-entity-field.js +41 -0
- package/fesm2015/reskin-core-entity-field.js.map +1 -0
- package/fesm2015/reskin-core-entity-file.js +4 -0
- package/fesm2015/reskin-core-entity-file.js.map +1 -0
- package/fesm2015/reskin-core-entity-menu.js +32 -0
- package/fesm2015/reskin-core-entity-menu.js.map +1 -0
- package/fesm2015/reskin-core-entity-org.js +39 -0
- package/fesm2015/reskin-core-entity-org.js.map +1 -0
- package/fesm2015/reskin-core-entity-scheme.js +55 -0
- package/fesm2015/reskin-core-entity-scheme.js.map +1 -0
- package/fesm2015/reskin-core-entity-user.js +4 -0
- package/fesm2015/reskin-core-entity-user.js.map +1 -0
- package/fesm2015/reskin-core-entity.js +4 -0
- package/fesm2015/reskin-core-entity.js.map +1 -0
- package/fesm2015/reskin-core-guards.js +60 -0
- package/fesm2015/reskin-core-guards.js.map +1 -0
- package/fesm2015/reskin-core-interceptors.js +179 -0
- package/fesm2015/reskin-core-interceptors.js.map +1 -0
- package/fesm2015/reskin-core-services.js +605 -0
- package/fesm2015/reskin-core-services.js.map +1 -0
- package/fesm2015/reskin-core-utils.js +118 -0
- package/fesm2015/reskin-core-utils.js.map +1 -0
- package/fesm2015/reskin-core.js +6 -0
- package/fesm2015/reskin-core.js.map +1 -0
- package/guards/auth.guard.d.ts +15 -0
- package/guards/package.json +10 -0
- package/guards/public-api.d.ts +1 -0
- package/guards/reskin-core-guards.d.ts +5 -0
- package/interceptors/blob.interceptor.d.ts +20 -0
- package/interceptors/cache.interceptor.d.ts +19 -0
- package/interceptors/error.interceptor.d.ts +19 -0
- package/interceptors/package.json +10 -0
- package/interceptors/public-api.d.ts +4 -0
- package/interceptors/reskin-core-interceptors.d.ts +5 -0
- package/interceptors/token.interceptor.d.ts +28 -0
- package/package.json +22 -0
- package/public-api.d.ts +2 -0
- package/reskin-core.d.ts +5 -0
- package/services/account.service.d.ts +33 -0
- package/services/app.config.d.ts +40 -0
- package/services/auth.service.d.ts +26 -0
- package/services/cache.http.service.d.ts +37 -0
- package/services/destroy.service.d.ts +8 -0
- package/services/dictionary.service.d.ts +57 -0
- package/services/down.file.service.d.ts +29 -0
- package/services/field.scheme.service.d.ts +17 -0
- package/services/file.service.d.ts +33 -0
- package/services/menu.service.d.ts +16 -0
- package/services/org.service.d.ts +31 -0
- package/services/package.json +10 -0
- package/services/public-api.d.ts +12 -0
- package/services/reskin-core-services.d.ts +5 -0
- package/services/scheme.service.d.ts +17 -0
- package/utils/array.d.ts +5 -0
- package/utils/dom.d.ts +6 -0
- package/utils/package.json +10 -0
- package/utils/public-api.d.ts +3 -0
- package/utils/reskin-core-utils.d.ts +5 -0
- package/utils/store.d.ts +42 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 系统菜单
|
|
3
|
+
*
|
|
4
|
+
* @export
|
|
5
|
+
* @enum {number}
|
|
6
|
+
*/
|
|
7
|
+
var MenuTypeEnum;
|
|
8
|
+
(function (MenuTypeEnum) {
|
|
9
|
+
/**
|
|
10
|
+
* 目录
|
|
11
|
+
*/
|
|
12
|
+
MenuTypeEnum[MenuTypeEnum["CATALOG"] = 0] = "CATALOG";
|
|
13
|
+
/**
|
|
14
|
+
* 菜单
|
|
15
|
+
*/
|
|
16
|
+
MenuTypeEnum[MenuTypeEnum["MENU"] = 1] = "MENU";
|
|
17
|
+
/**
|
|
18
|
+
* 按钮
|
|
19
|
+
*/
|
|
20
|
+
MenuTypeEnum[MenuTypeEnum["BUTTON"] = 2] = "BUTTON";
|
|
21
|
+
/**
|
|
22
|
+
* 元素
|
|
23
|
+
*/
|
|
24
|
+
MenuTypeEnum[MenuTypeEnum["ELEMENT"] = 3] = "ELEMENT";
|
|
25
|
+
})(MenuTypeEnum || (MenuTypeEnum = {}));
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Generated bundle index. Do not edit.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
export { MenuTypeEnum };
|
|
32
|
+
//# sourceMappingURL=reskin-core-entity-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reskin-core-entity-menu.js","sources":["../../../library/core/entity/menu/MenuTypeEnum.ts","../../../library/core/entity/menu/reskin-core-entity-menu.ts"],"sourcesContent":["/**\r\n * 系统菜单\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum MenuTypeEnum {\r\n /**\r\n * 目录\r\n */\r\n CATALOG = 0,\r\n /**\r\n * 菜单\r\n */\r\n MENU = 1,\r\n /**\r\n * 按钮\r\n */\r\n BUTTON = 2,\r\n /**\r\n * 元素\r\n */\r\n ELEMENT = 3,\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA;;;;;AAKG;IACS,aAiBX;AAjBD,CAAA,UAAY,YAAY,EAAA;AACpB;;AAEG;AACH,IAAA,YAAA,CAAA,YAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACX;;AAEG;AACH,IAAA,YAAA,CAAA,YAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR;;AAEG;AACH,IAAA,YAAA,CAAA,YAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACV;;AAEG;AACH,IAAA,YAAA,CAAA,YAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACf,CAAC,EAjBW,YAAY,KAAZ,YAAY,GAiBvB,EAAA,CAAA,CAAA;;ACvBD;;AAEG;;;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 机构类型
|
|
3
|
+
*/
|
|
4
|
+
var OrgTypeEnum;
|
|
5
|
+
(function (OrgTypeEnum) {
|
|
6
|
+
/**
|
|
7
|
+
* 虚拟节点
|
|
8
|
+
*/
|
|
9
|
+
OrgTypeEnum[OrgTypeEnum["VIRTUAL_NODE"] = 0] = "VIRTUAL_NODE";
|
|
10
|
+
/**
|
|
11
|
+
* 单位
|
|
12
|
+
*/
|
|
13
|
+
OrgTypeEnum[OrgTypeEnum["UNIT"] = 1] = "UNIT";
|
|
14
|
+
/**
|
|
15
|
+
* 部门
|
|
16
|
+
*/
|
|
17
|
+
OrgTypeEnum[OrgTypeEnum["DEPARTMENT"] = 2] = "DEPARTMENT";
|
|
18
|
+
})(OrgTypeEnum || (OrgTypeEnum = {}));
|
|
19
|
+
/**
|
|
20
|
+
* 机构类型对应中文
|
|
21
|
+
*/
|
|
22
|
+
const OrgTypeCName = {
|
|
23
|
+
[OrgTypeEnum.VIRTUAL_NODE]: {
|
|
24
|
+
label: '虚拟节点',
|
|
25
|
+
},
|
|
26
|
+
[OrgTypeEnum.UNIT]: {
|
|
27
|
+
label: '单位',
|
|
28
|
+
},
|
|
29
|
+
[OrgTypeEnum.DEPARTMENT]: {
|
|
30
|
+
label: '部门',
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Generated bundle index. Do not edit.
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
export { OrgTypeCName, OrgTypeEnum };
|
|
39
|
+
//# sourceMappingURL=reskin-core-entity-org.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reskin-core-entity-org.js","sources":["../../../library/core/entity/org/OrgTypeEnum.ts","../../../library/core/entity/org/reskin-core-entity-org.ts"],"sourcesContent":["/**\r\n * 机构类型\r\n */\r\nexport enum OrgTypeEnum {\r\n /**\r\n * 虚拟节点\r\n */\r\n VIRTUAL_NODE = 0,\r\n /**\r\n * 单位\r\n */\r\n UNIT = 1,\r\n /**\r\n * 部门\r\n */\r\n DEPARTMENT = 2,\r\n}\r\n\r\n/**\r\n * 机构类型对应中文\r\n */\r\nexport const OrgTypeCName = {\r\n [OrgTypeEnum.VIRTUAL_NODE]: {\r\n label: '虚拟节点',\r\n },\r\n [OrgTypeEnum.UNIT]: {\r\n label: '单位',\r\n },\r\n [OrgTypeEnum.DEPARTMENT]: {\r\n label: '部门',\r\n },\r\n};\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA;;AAEG;IACS,YAaX;AAbD,CAAA,UAAY,WAAW,EAAA;AACnB;;AAEG;AACH,IAAA,WAAA,CAAA,WAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB,CAAA;AAChB;;AAEG;AACH,IAAA,WAAA,CAAA,WAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR;;AAEG;AACH,IAAA,WAAA,CAAA,WAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc,CAAA;AAClB,CAAC,EAbW,WAAW,KAAX,WAAW,GAatB,EAAA,CAAA,CAAA,CAAA;AAED;;AAEG;AACU,MAAA,YAAY,GAAG;AACxB,IAAA,CAAC,WAAW,CAAC,YAAY,GAAG;AACxB,QAAA,KAAK,EAAE,MAAM;AAChB,KAAA;AACD,IAAA,CAAC,WAAW,CAAC,IAAI,GAAG;AAChB,QAAA,KAAK,EAAE,IAAI;AACd,KAAA;AACD,IAAA,CAAC,WAAW,CAAC,UAAU,GAAG;AACtB,QAAA,KAAK,EAAE,IAAI;AACd,KAAA;;;AC9BL;;AAEG;;;;"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 对齐方式
|
|
3
|
+
*
|
|
4
|
+
* @export
|
|
5
|
+
* @enum {number}
|
|
6
|
+
*/
|
|
7
|
+
var AlignTypeEnum;
|
|
8
|
+
(function (AlignTypeEnum) {
|
|
9
|
+
/**
|
|
10
|
+
* 左对齐
|
|
11
|
+
*/
|
|
12
|
+
AlignTypeEnum[AlignTypeEnum["LEFT"] = 0] = "LEFT";
|
|
13
|
+
/**
|
|
14
|
+
* 居中对齐
|
|
15
|
+
*/
|
|
16
|
+
AlignTypeEnum[AlignTypeEnum["CENTER"] = 1] = "CENTER";
|
|
17
|
+
/**
|
|
18
|
+
* 右对齐
|
|
19
|
+
*/
|
|
20
|
+
AlignTypeEnum[AlignTypeEnum["RIGHT"] = 2] = "RIGHT";
|
|
21
|
+
})(AlignTypeEnum || (AlignTypeEnum = {}));
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 字段显示类型
|
|
25
|
+
*/
|
|
26
|
+
var SchemeEditTypeEnum;
|
|
27
|
+
(function (SchemeEditTypeEnum) {
|
|
28
|
+
/**
|
|
29
|
+
* 文本
|
|
30
|
+
*/
|
|
31
|
+
SchemeEditTypeEnum[SchemeEditTypeEnum["TEXT"] = 1] = "TEXT";
|
|
32
|
+
/**
|
|
33
|
+
* 数字
|
|
34
|
+
*/
|
|
35
|
+
SchemeEditTypeEnum[SchemeEditTypeEnum["INT"] = 2] = "INT";
|
|
36
|
+
/**
|
|
37
|
+
* 时间
|
|
38
|
+
*/
|
|
39
|
+
SchemeEditTypeEnum[SchemeEditTypeEnum["DATE"] = 3] = "DATE";
|
|
40
|
+
/**
|
|
41
|
+
* 备注
|
|
42
|
+
*/
|
|
43
|
+
SchemeEditTypeEnum[SchemeEditTypeEnum["MEMO"] = 4] = "MEMO";
|
|
44
|
+
/**
|
|
45
|
+
* 下拉代码
|
|
46
|
+
*/
|
|
47
|
+
SchemeEditTypeEnum[SchemeEditTypeEnum["SELECT"] = 5] = "SELECT";
|
|
48
|
+
})(SchemeEditTypeEnum || (SchemeEditTypeEnum = {}));
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Generated bundle index. Do not edit.
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
export { AlignTypeEnum, SchemeEditTypeEnum };
|
|
55
|
+
//# sourceMappingURL=reskin-core-entity-scheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reskin-core-entity-scheme.js","sources":["../../../library/core/entity/scheme/IScheme.ts","../../../library/core/entity/scheme/SchemeEditTypeEnum.ts","../../../library/core/entity/scheme/reskin-core-entity-scheme.ts"],"sourcesContent":["import { SchemeEditTypeEnum } from './SchemeEditTypeEnum';\r\nimport { ITableField } from '@reskin/core/entity/field';\r\n\r\n/**\r\n * 界面方案\r\n */\r\nexport interface IScheme {\r\n /**\r\n * 界面方案基本信息\r\n */\r\n sysPageScheme: IPageScheme;\r\n /**\r\n * 界面方案配置内容\r\n */\r\n systemSchemeList: ISchemeListItem[];\r\n}\r\n\r\n/**\r\n * 界面方案基本信息\r\n */\r\nexport interface IPageScheme {\r\n /**\r\n * 列数\r\n */\r\n SCHEME_COLUMN_COUNT: number;\r\n /**\r\n * 说明\r\n */\r\n SCHEME_DESC: string;\r\n /**\r\n * 说明\r\n */\r\n SCHEME_NAME: string;\r\n /**\r\n * 标识符\r\n */\r\n SCHEME_PERMISSION: string;\r\n /**\r\n * 方案类型\r\n */\r\n SCHEME_TYPE: number;\r\n}\r\n\r\n/**\r\n * 界面方案配置内容项\r\n */\r\nexport interface ISchemeListItem {\r\n /**\r\n * 界面方案字段编辑配置\r\n */\r\n systemSchemeEdit: ISchemeEditItem[];\r\n /**\r\n * 界面方案字段列头配置\r\n */\r\n systemSchemeHeader: ISchemeHeaderItem[];\r\n /**\r\n * 界面方案指标集信息\r\n */\r\n systemSchemeTable: ISchemeTable;\r\n}\r\n\r\n/**\r\n * 界面方案字段编辑配置项\r\n */\r\nexport interface ISchemeEditItem extends ITableField {\r\n /**\r\n * 校验脚本\r\n */\r\n SCHEME_EDIT_CHECK_SCRIPT: string;\r\n /**\r\n * 触发脚本\r\n */\r\n SCHEME_EDIT_TRIGGER_SCRIPT: string;\r\n /**\r\n * 列编码\r\n */\r\n SCHEME_EDIT_COLUMN_ID: string;\r\n /**\r\n * 显示标题\r\n */\r\n SCHEME_EDIT_DISPLAY_NAME: string;\r\n /**\r\n * 编辑框宽度\r\n */\r\n SCHEME_EDIT_EDIT_WIDTH: number;\r\n /**\r\n * 是否必录\r\n */\r\n SCHEME_EDIT_IS_MUST_INPUT: boolean;\r\n /**\r\n * 是否只读\r\n */\r\n SCHEME_EDIT_IS_READONLY: boolean;\r\n /**\r\n * 标题宽度\r\n */\r\n SCHEME_EDIT_LABEL_WIDTH: number;\r\n /**\r\n * 界面方案ID\r\n */\r\n SCHEME_EDIT_SCHEME_ID: string;\r\n /**\r\n * 表编码\r\n */\r\n SCHEME_EDIT_TABLE_ID: string;\r\n /**\r\n * 显示类型\r\n */\r\n SCHEME_EDIT_VIEW_TYPE: SchemeEditTypeEnum;\r\n /**\r\n * 配置信息\r\n */\r\n SCHEME_EDIT_CONFIG: string;\r\n /**\r\n * 主键ID\r\n */\r\n SYSTEM_SCHEME_EDIT_ID: string;\r\n}\r\n\r\n/**\r\n * 界面方案字段列头配置项\r\n */\r\nexport interface ISchemeHeaderItem extends ITableField {\r\n /**\r\n * 对齐方式\r\n */\r\n SCHEME_HEADER_ALIGN_TYPE: AlignTypeEnum;\r\n /**\r\n * 列编码\r\n */\r\n SCHEME_HEADER_COLUMN_ID: string;\r\n /**\r\n * 显示名称\r\n */\r\n SCHEME_HEADER_DISPLAY_NAME: string;\r\n /**\r\n * 显示宽度\r\n */\r\n SCHEME_HEADER_DISPLAY_WIDTH: number;\r\n /**\r\n * 界面方案ID\r\n */\r\n SCHEME_HEADER_SCHEME_ID: string;\r\n /**\r\n * 表编码\r\n */\r\n SCHEME_HEADER_TABLE_ID: string;\r\n}\r\n\r\n/**\r\n * 界面方案指标集信息\r\n */\r\nexport interface ISchemeTable {\r\n /**\r\n * 备注\r\n */\r\n SCHEME_TABLE_DESC: string;\r\n /**\r\n * 显示名称\r\n */\r\n SCHEME_TABLE_DISPLAY_NAME: string;\r\n /**\r\n * 显示方式\r\n */\r\n SCHEME_TABLE_DISPLAY_TYPE: number;\r\n /**\r\n * 界面方案ID\r\n */\r\n SCHEME_TABLE_SCHEME_ID: string;\r\n /**\r\n * 表编码\r\n */\r\n SCHEME_TABLE_TABLE_ID: string;\r\n /**\r\n * 指标集编码\r\n */\r\n TABLE_CODE: string;\r\n /**\r\n * 指标集名称\r\n */\r\n TABLE_NAME: string;\r\n /**\r\n * 指标集对应主集\r\n */\r\n TABLE_PARENT_CODES: string;\r\n}\r\n\r\n/**\r\n * 对齐方式\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum AlignTypeEnum {\r\n /**\r\n * 左对齐\r\n */\r\n LEFT,\r\n /**\r\n * 居中对齐\r\n */\r\n CENTER,\r\n /**\r\n * 右对齐\r\n */\r\n RIGHT,\r\n}\r\n","/**\r\n * 字段显示类型\r\n */\r\nexport enum SchemeEditTypeEnum {\r\n /**\r\n * 文本\r\n */\r\n TEXT = 1,\r\n /**\r\n * 数字\r\n */\r\n INT = 2,\r\n /**\r\n * 时间\r\n */\r\n DATE = 3,\r\n /**\r\n * 备注\r\n */\r\n MEMO = 4,\r\n /**\r\n * 下拉代码\r\n */\r\n SELECT = 5,\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AA2LA;;;;;AAKG;IACS,cAaX;AAbD,CAAA,UAAY,aAAa,EAAA;AACrB;;AAEG;AACH,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACJ;;AAEG;AACH,IAAA,aAAA,CAAA,aAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;AACN;;AAEG;AACH,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACT,CAAC,EAbW,aAAa,KAAb,aAAa,GAaxB,EAAA,CAAA,CAAA;;AC9MD;;AAEG;IACS,mBAqBX;AArBD,CAAA,UAAY,kBAAkB,EAAA;AAC1B;;AAEG;AACH,IAAA,kBAAA,CAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR;;AAEG;AACH,IAAA,kBAAA,CAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACP;;AAEG;AACH,IAAA,kBAAA,CAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR;;AAEG;AACH,IAAA,kBAAA,CAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR;;AAEG;AACH,IAAA,kBAAA,CAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACd,CAAC,EArBW,kBAAkB,KAAlB,kBAAkB,GAqB7B,EAAA,CAAA,CAAA;;ACxBD;;AAEG;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reskin-core-entity-user.js","sources":["../../../library/core/entity/user/reskin-core-entity-user.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA;;AAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reskin-core-entity.js","sources":["../../../library/core/entity/reskin-core-entity.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA;;AAEG"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { filter, map, catchError } from 'rxjs/operators';
|
|
4
|
+
import * as i1 from '@reskin/core/services';
|
|
5
|
+
import * as i2 from '@angular/router';
|
|
6
|
+
|
|
7
|
+
class RkAuthGuard {
|
|
8
|
+
constructor(menu, router) {
|
|
9
|
+
this.menu = menu;
|
|
10
|
+
this.router = router;
|
|
11
|
+
}
|
|
12
|
+
canActivateChild(childRoute, state) {
|
|
13
|
+
return this.menu.requestData().pipe(filter((json) => json.code === 0), map((json) => json.data), map((menus) => this.checkAccess(menus, childRoute, state.url)), catchError(() => {
|
|
14
|
+
this.handleNoAccess(state.url);
|
|
15
|
+
return [false];
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
checkAccess(menus, childRoute, url) {
|
|
19
|
+
if (!menus.length) {
|
|
20
|
+
throw new Error(`此账号无任何功能权限.`);
|
|
21
|
+
}
|
|
22
|
+
const cleanUrl = url.replace(/\?.*/, '');
|
|
23
|
+
const authRoutes = new Set(menus.map((m) => m.SYSTEM_RESOURCE_URL));
|
|
24
|
+
if (authRoutes.has(cleanUrl)) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
const { extendAuth, extendRoutes } = childRoute.data;
|
|
28
|
+
if (extendAuth && extendRoutes) {
|
|
29
|
+
const hasWildcardMatch = extendRoutes.some((route) => route.includes('**') ? this.match(route, cleanUrl) : route === cleanUrl);
|
|
30
|
+
if (hasWildcardMatch) {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
this.handleNoAccess(url);
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
match(pattern, path) {
|
|
38
|
+
const regexPattern = pattern.replace(/\*\*/g, '.*');
|
|
39
|
+
return new RegExp(`^${regexPattern}$`).test(path);
|
|
40
|
+
}
|
|
41
|
+
handleNoAccess(url) {
|
|
42
|
+
console.error(`无权限访问路由地址: ${url}`);
|
|
43
|
+
this.router.navigate(['/errors/401']).then();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
RkAuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkAuthGuard, deps: [{ token: i1.RkMenuService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
47
|
+
RkAuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkAuthGuard, providedIn: 'root' });
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkAuthGuard, decorators: [{
|
|
49
|
+
type: Injectable,
|
|
50
|
+
args: [{
|
|
51
|
+
providedIn: 'root',
|
|
52
|
+
}]
|
|
53
|
+
}], ctorParameters: function () { return [{ type: i1.RkMenuService }, { type: i2.Router }]; } });
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Generated bundle index. Do not edit.
|
|
57
|
+
*/
|
|
58
|
+
|
|
59
|
+
export { RkAuthGuard };
|
|
60
|
+
//# sourceMappingURL=reskin-core-guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reskin-core-guards.js","sources":["../../../library/core/guards/auth.guard.ts","../../../library/core/guards/reskin-core-guards.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivateChild, Router, RouterStateSnapshot, UrlTree } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { filter, map, catchError } from 'rxjs/operators';\r\nimport { RkMenuService } from '@reskin/core/services';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RkAuthGuard implements CanActivateChild {\r\n constructor(\r\n private menu: RkMenuService,\r\n private router: Router,\r\n ) {}\r\n\r\n canActivateChild(\r\n childRoute: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n ): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n return this.menu.requestData().pipe(\r\n filter((json) => json.code === 0),\r\n map((json) => json.data),\r\n map((menus) => this.checkAccess(menus, childRoute, state.url)),\r\n catchError(() => {\r\n this.handleNoAccess(state.url);\r\n return [false];\r\n }),\r\n );\r\n }\r\n\r\n private checkAccess(menus: any[], childRoute: ActivatedRouteSnapshot, url: string): boolean | UrlTree {\r\n if (!menus.length) {\r\n throw new Error(`此账号无任何功能权限.`);\r\n }\r\n\r\n const cleanUrl = url.replace(/\\?.*/, '');\r\n const authRoutes = new Set<string>(menus.map((m) => m.SYSTEM_RESOURCE_URL));\r\n\r\n if (authRoutes.has(cleanUrl)) {\r\n return true;\r\n }\r\n\r\n const { extendAuth, extendRoutes } = childRoute.data;\r\n if (extendAuth && extendRoutes) {\r\n const hasWildcardMatch = extendRoutes.some((route: string) =>\r\n route.includes('**') ? this.match(route, cleanUrl) : route === cleanUrl,\r\n );\r\n if (hasWildcardMatch) {\r\n return true;\r\n }\r\n }\r\n\r\n this.handleNoAccess(url);\r\n return false;\r\n }\r\n\r\n private match(pattern: string, path: string): boolean {\r\n const regexPattern = pattern.replace(/\\*\\*/g, '.*');\r\n return new RegExp(`^${regexPattern}$`).test(path);\r\n }\r\n\r\n private handleNoAccess(url: string): void {\r\n console.error(`无权限访问路由地址: ${url}`);\r\n this.router.navigate(['/errors/401']).then();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { HTTP_INTERCEPTORS, HttpHeaders, HttpEventType, HttpResponse } from '@angular/common/http';
|
|
4
|
+
import * as i1 from '@reskin/core/services';
|
|
5
|
+
import { of, Observable } from 'rxjs';
|
|
6
|
+
import { catchError, shareReplay, switchMap } from 'rxjs/operators';
|
|
7
|
+
import * as i1$1 from '@angular/router';
|
|
8
|
+
|
|
9
|
+
class TokenInterceptor {
|
|
10
|
+
constructor(service) {
|
|
11
|
+
this.service = service;
|
|
12
|
+
}
|
|
13
|
+
intercept(request, next) {
|
|
14
|
+
const tc = request.headers.get('Token-Control');
|
|
15
|
+
const auth = this.service.token;
|
|
16
|
+
// 当 header 中 Token-Control 为 no-token 时不携带 token
|
|
17
|
+
if (tc !== 'no-token' && auth.token) {
|
|
18
|
+
request = request.clone({
|
|
19
|
+
setHeaders: {
|
|
20
|
+
'Authorization': auth.token,
|
|
21
|
+
'X-Auth-Id': auth.id,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return next.handle(request);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
TokenInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TokenInterceptor, deps: [{ token: i1.RkAuthService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
29
|
+
TokenInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TokenInterceptor });
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TokenInterceptor, decorators: [{
|
|
31
|
+
type: Injectable
|
|
32
|
+
}], ctorParameters: function () { return [{ type: i1.RkAuthService }]; } });
|
|
33
|
+
/**
|
|
34
|
+
* 请求头增加token验证拦截器
|
|
35
|
+
*/
|
|
36
|
+
function providerAuthToken() {
|
|
37
|
+
return { provide: HTTP_INTERCEPTORS, useClass: TokenInterceptor, multi: true };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 不带token验证信息请求
|
|
41
|
+
* @param urls 地址
|
|
42
|
+
* @param params 参数
|
|
43
|
+
* @constructor
|
|
44
|
+
*/
|
|
45
|
+
function NoAuthTokenTemplate(urls, ...params) {
|
|
46
|
+
let [url] = urls;
|
|
47
|
+
if (params.length > 0) {
|
|
48
|
+
url = String.raw(urls, ...params);
|
|
49
|
+
}
|
|
50
|
+
return [url, { headers: new HttpHeaders({ 'Token-Control': 'no-token' }) }];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
class ErrorInterceptor {
|
|
54
|
+
constructor(router) {
|
|
55
|
+
this.router = router;
|
|
56
|
+
}
|
|
57
|
+
intercept(request, next) {
|
|
58
|
+
return next.handle(request).pipe(catchError((result) => {
|
|
59
|
+
var _a;
|
|
60
|
+
if (result.status === 401) {
|
|
61
|
+
this.router.navigateByUrl('/').then();
|
|
62
|
+
}
|
|
63
|
+
if (result.error.code) {
|
|
64
|
+
return of(result.error);
|
|
65
|
+
}
|
|
66
|
+
throw (_a = result.error.msg) !== null && _a !== void 0 ? _a : result.message;
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
ErrorInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ErrorInterceptor, deps: [{ token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
71
|
+
ErrorInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ErrorInterceptor });
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ErrorInterceptor, decorators: [{
|
|
73
|
+
type: Injectable
|
|
74
|
+
}], ctorParameters: function () { return [{ type: i1$1.Router }]; } });
|
|
75
|
+
/**
|
|
76
|
+
* 请求错误拦截器
|
|
77
|
+
*/
|
|
78
|
+
function providerHttpError() {
|
|
79
|
+
return { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true };
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
class CacheInterceptor {
|
|
83
|
+
constructor(cacheHttp) {
|
|
84
|
+
this.cacheHttp = cacheHttp;
|
|
85
|
+
}
|
|
86
|
+
intercept(request, next) {
|
|
87
|
+
// 1.判断是GET
|
|
88
|
+
// 2.header中添加 Cache-Map: Storage
|
|
89
|
+
const cacheMap = request.headers.get('Cache-Map');
|
|
90
|
+
if (request.method === 'GET' && cacheMap === 'Storage') {
|
|
91
|
+
let response = this.cacheHttp.get(request.url);
|
|
92
|
+
if (!response) {
|
|
93
|
+
response = next.handle(request).pipe(shareReplay(1));
|
|
94
|
+
this.cacheHttp.set(request.url, response);
|
|
95
|
+
}
|
|
96
|
+
return response;
|
|
97
|
+
}
|
|
98
|
+
return next.handle(request);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
CacheInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CacheInterceptor, deps: [{ token: i1.RkCacheHttpService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
102
|
+
CacheInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CacheInterceptor });
|
|
103
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CacheInterceptor, decorators: [{
|
|
104
|
+
type: Injectable
|
|
105
|
+
}], ctorParameters: function () { return [{ type: i1.RkCacheHttpService }]; } });
|
|
106
|
+
/**
|
|
107
|
+
* GET请求缓存拦截器
|
|
108
|
+
*/
|
|
109
|
+
function providerHttpCache() {
|
|
110
|
+
return { provide: HTTP_INTERCEPTORS, useClass: CacheInterceptor, multi: true };
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
class BlobInterceptor {
|
|
114
|
+
intercept(request, next) {
|
|
115
|
+
if (request.responseType !== 'blob') {
|
|
116
|
+
return next.handle(request);
|
|
117
|
+
}
|
|
118
|
+
return next.handle(request).pipe(switchMap((response) => this.handleBlobResponse(response)), catchError((response) => this.handleBlobError(response)));
|
|
119
|
+
}
|
|
120
|
+
handleBlobResponse(response) {
|
|
121
|
+
if (response.type !== HttpEventType.Response) {
|
|
122
|
+
return new Observable((subscriber) => {
|
|
123
|
+
subscriber.next(response);
|
|
124
|
+
subscriber.complete();
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
if (response instanceof HttpResponse && response.body && response.body.type === 'application/json') {
|
|
128
|
+
return new Observable((subscriber) => this.blobToJson(response.body, subscriber));
|
|
129
|
+
}
|
|
130
|
+
return new Observable((subscriber) => {
|
|
131
|
+
subscriber.next(response);
|
|
132
|
+
subscriber.complete();
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
handleBlobError(response) {
|
|
136
|
+
if (response.error && response.error.type === 'application/json') {
|
|
137
|
+
return new Observable((subscriber) => this.blobToJson(response.error, subscriber));
|
|
138
|
+
}
|
|
139
|
+
return new Observable((subscriber) => {
|
|
140
|
+
subscriber.error(response);
|
|
141
|
+
subscriber.complete();
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
blobToJson(blob, subscriber) {
|
|
145
|
+
const reader = new FileReader();
|
|
146
|
+
reader.addEventListener('loadend', () => {
|
|
147
|
+
try {
|
|
148
|
+
const json = JSON.parse(reader.result);
|
|
149
|
+
subscriber.error(json);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
subscriber.error(error);
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
subscriber.complete();
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
reader.readAsText(blob, 'utf-8');
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
BlobInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BlobInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
162
|
+
BlobInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BlobInterceptor });
|
|
163
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BlobInterceptor, decorators: [{
|
|
164
|
+
type: Injectable
|
|
165
|
+
}] });
|
|
166
|
+
/**
|
|
167
|
+
* 下载文件拦截器
|
|
168
|
+
* blob类型的请求会被处理
|
|
169
|
+
*/
|
|
170
|
+
function providerDownBlob() {
|
|
171
|
+
return { provide: HTTP_INTERCEPTORS, useClass: BlobInterceptor, multi: true };
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Generated bundle index. Do not edit.
|
|
176
|
+
*/
|
|
177
|
+
|
|
178
|
+
export { BlobInterceptor, CacheInterceptor, ErrorInterceptor, NoAuthTokenTemplate, TokenInterceptor, providerAuthToken, providerDownBlob, providerHttpCache, providerHttpError };
|
|
179
|
+
//# sourceMappingURL=reskin-core-interceptors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reskin-core-interceptors.js","sources":["../../../library/core/interceptors/token.interceptor.ts","../../../library/core/interceptors/error.interceptor.ts","../../../library/core/interceptors/cache.interceptor.ts","../../../library/core/interceptors/blob.interceptor.ts","../../../library/core/interceptors/reskin-core-interceptors.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HTTP_INTERCEPTORS, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { RkAuthService } from '@reskin/core/services';\r\nimport { IAuth } from '@reskin/core/entity/user';\r\n\r\n@Injectable()\r\nexport class TokenInterceptor implements HttpInterceptor {\r\n constructor(private service: RkAuthService) {}\r\n\r\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\r\n const tc = request.headers.get('Token-Control');\r\n const auth: IAuth = this.service.token;\r\n // 当 header 中 Token-Control 为 no-token 时不携带 token\r\n if (tc !== 'no-token' && auth.token) {\r\n request = request.clone({\r\n setHeaders: {\r\n 'Authorization': auth.token,\r\n 'X-Auth-Id': auth.id,\r\n },\r\n });\r\n }\r\n return next.handle(request);\r\n }\r\n}\r\n\r\n/**\r\n * 请求头增加token验证拦截器\r\n */\r\nexport function providerAuthToken() {\r\n return { provide: HTTP_INTERCEPTORS, useClass: TokenInterceptor, multi: true };\r\n}\r\n\r\n/**\r\n * 不带token验证信息请求\r\n * @param urls 地址\r\n * @param params 参数\r\n * @constructor\r\n */\r\nexport function NoAuthTokenTemplate(urls: TemplateStringsArray, ...params: any[]): [string, { headers: HttpHeaders }] {\r\n let [url] = urls;\r\n if (params.length > 0) {\r\n url = String.raw(urls, ...params);\r\n }\r\n return [url, { headers: new HttpHeaders({ 'Token-Control': 'no-token' }) }];\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { Observable, of } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { Router } from '@angular/router';\r\n\r\n@Injectable()\r\nexport class ErrorInterceptor implements HttpInterceptor {\r\n constructor(private router: Router) {}\r\n\r\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\r\n return next.handle(request).pipe(\r\n catchError((result) => {\r\n if (result.status === 401) {\r\n this.router.navigateByUrl('/').then();\r\n }\r\n if (result.error.code) {\r\n return of(result.error);\r\n }\r\n throw result.error.msg ?? result.message;\r\n }),\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * 请求错误拦截器\r\n */\r\nexport function providerHttpError() {\r\n return { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpResponse, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { shareReplay } from 'rxjs/operators';\r\nimport { RkCacheHttpService } from '@reskin/core/services';\r\n\r\n@Injectable()\r\nexport class CacheInterceptor implements HttpInterceptor {\r\n constructor(private cacheHttp: RkCacheHttpService) {}\r\n\r\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\r\n // 1.判断是GET\r\n // 2.header中添加 Cache-Map: Storage\r\n const cacheMap = request.headers.get('Cache-Map');\r\n if (request.method === 'GET' && cacheMap === 'Storage') {\r\n let response = this.cacheHttp.get(request.url);\r\n if (!response) {\r\n response = next.handle(request).pipe(shareReplay(1));\r\n this.cacheHttp.set(request.url, response);\r\n }\r\n return response;\r\n }\r\n return next.handle(request);\r\n }\r\n}\r\n\r\n/**\r\n * GET请求缓存拦截器\r\n */\r\nexport function providerHttpCache() {\r\n return { provide: HTTP_INTERCEPTORS, useClass: CacheInterceptor, multi: true };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n HttpRequest,\r\n HttpHandler,\r\n HttpEvent,\r\n HttpInterceptor,\r\n HttpEventType,\r\n HttpResponse,\r\n HttpErrorResponse,\r\n HTTP_INTERCEPTORS,\r\n} from '@angular/common/http';\r\nimport { Observable, Subscriber } from 'rxjs';\r\nimport { catchError, switchMap } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class BlobInterceptor implements HttpInterceptor {\r\n intercept<T>(request: HttpRequest<T>, next: HttpHandler): Observable<HttpEvent<T>> {\r\n if (request.responseType !== 'blob') {\r\n return next.handle(request);\r\n }\r\n return next.handle(request).pipe(\r\n switchMap((response: HttpEvent<any>) => this.handleBlobResponse(response)),\r\n catchError((response: HttpErrorResponse) => this.handleBlobError(response)),\r\n );\r\n }\r\n\r\n private handleBlobResponse<T>(response: HttpEvent<any>): Observable<HttpEvent<any>> {\r\n if (response.type !== HttpEventType.Response) {\r\n return new Observable((subscriber) => {\r\n subscriber.next(response);\r\n subscriber.complete();\r\n });\r\n }\r\n\r\n if (response instanceof HttpResponse && response.body && response.body.type === 'application/json') {\r\n return new Observable((subscriber) => this.blobToJson<T>(response.body, subscriber));\r\n }\r\n\r\n return new Observable((subscriber) => {\r\n subscriber.next(response);\r\n subscriber.complete();\r\n });\r\n }\r\n\r\n private handleBlobError<T>(response: HttpErrorResponse): Observable<HttpEvent<any>> {\r\n if (response.error && response.error.type === 'application/json') {\r\n return new Observable((subscriber) => this.blobToJson<T>(response.error, subscriber));\r\n }\r\n\r\n return new Observable((subscriber) => {\r\n subscriber.error(response);\r\n subscriber.complete();\r\n });\r\n }\r\n\r\n private blobToJson<T>(blob: Blob, subscriber: Subscriber<HttpEvent<T>>) {\r\n const reader = new FileReader();\r\n reader.addEventListener('loadend', () => {\r\n try {\r\n const json: T = JSON.parse(reader.result as string);\r\n subscriber.error(json);\r\n } catch (error) {\r\n subscriber.error(error);\r\n } finally {\r\n subscriber.complete();\r\n }\r\n });\r\n reader.readAsText(blob, 'utf-8');\r\n }\r\n}\r\n\r\n/**\r\n * 下载文件拦截器\r\n * blob类型的请求会被处理\r\n */\r\nexport function providerDownBlob() {\r\n return { provide: HTTP_INTERCEPTORS, useClass: BlobInterceptor, multi: true };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":";;;;;;;;MAOa,gBAAgB,CAAA;AACzB,IAAA,WAAA,CAAoB,OAAsB,EAAA;QAAtB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAe;KAAI;IAE9C,SAAS,CAAC,OAA6B,EAAE,IAAiB,EAAA;QACtD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAChD,QAAA,MAAM,IAAI,GAAU,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;;AAEvC,QAAA,IAAI,EAAE,KAAK,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE;AACjC,YAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;AACpB,gBAAA,UAAU,EAAE;oBACR,eAAe,EAAE,IAAI,CAAC,KAAK;oBAC3B,WAAW,EAAE,IAAI,CAAC,EAAE;AACvB,iBAAA;AACJ,aAAA,CAAC,CAAC;AACN,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KAC/B;;8GAhBQ,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAhB,gBAAgB,EAAA,CAAA,CAAA;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;AAoBX;;AAEG;SACa,iBAAiB,GAAA;AAC7B,IAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACnF,CAAC;AAED;;;;;AAKG;SACa,mBAAmB,CAAC,IAA0B,EAAE,GAAG,MAAa,EAAA;AAC5E,IAAA,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACjB,IAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACnB,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC;AACrC,KAAA;AACD,IAAA,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;AAChF;;MCtCa,gBAAgB,CAAA;AACzB,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAAI;IAEtC,SAAS,CAAC,OAA6B,EAAE,IAAiB,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAC5B,UAAU,CAAC,CAAC,MAAM,KAAI;;AAClB,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE;gBACvB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACzC,aAAA;AACD,YAAA,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;AACnB,gBAAA,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3B,aAAA;YACD,MAAM,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,CAAC,GAAG,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,MAAM,CAAC,OAAO,CAAC;SAC5C,CAAC,CACL,CAAC;KACL;;8GAfQ,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAhB,gBAAgB,EAAA,CAAA,CAAA;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;AAmBX;;AAEG;SACa,iBAAiB,GAAA;AAC7B,IAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACnF;;MCvBa,gBAAgB,CAAA;AACzB,IAAA,WAAA,CAAoB,SAA6B,EAAA;QAA7B,IAAS,CAAA,SAAA,GAAT,SAAS,CAAoB;KAAI;IAErD,SAAS,CAAC,OAA6B,EAAE,IAAiB,EAAA;;;QAGtD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,QAAQ,KAAK,SAAS,EAAE;AACpD,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,EAAE;AACX,gBAAA,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC7C,aAAA;AACD,YAAA,OAAO,QAAQ,CAAC;AACnB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KAC/B;;8GAhBQ,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAhB,gBAAgB,EAAA,CAAA,CAAA;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;AAoBX;;AAEG;SACa,iBAAiB,GAAA;AAC7B,IAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACnF;;MChBa,eAAe,CAAA;IACxB,SAAS,CAAI,OAAuB,EAAE,IAAiB,EAAA;AACnD,QAAA,IAAI,OAAO,CAAC,YAAY,KAAK,MAAM,EAAE;AACjC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/B,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAC5B,SAAS,CAAC,CAAC,QAAwB,KAAK,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,EAC1E,UAAU,CAAC,CAAC,QAA2B,KAAK,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAC9E,CAAC;KACL;AAEO,IAAA,kBAAkB,CAAI,QAAwB,EAAA;AAClD,QAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,EAAE;AAC1C,YAAA,OAAO,IAAI,UAAU,CAAC,CAAC,UAAU,KAAI;AACjC,gBAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1B,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC1B,aAAC,CAAC,CAAC;AACN,SAAA;AAED,QAAA,IAAI,QAAQ,YAAY,YAAY,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE;AAChG,YAAA,OAAO,IAAI,UAAU,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAI,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;AACxF,SAAA;AAED,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,UAAU,KAAI;AACjC,YAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1B,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC1B,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,eAAe,CAAI,QAA2B,EAAA;QAClD,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE;AAC9D,YAAA,OAAO,IAAI,UAAU,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAI,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;AACzF,SAAA;AAED,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,UAAU,KAAI;AACjC,YAAA,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3B,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC1B,SAAC,CAAC,CAAC;KACN;IAEO,UAAU,CAAI,IAAU,EAAE,UAAoC,EAAA;AAClE,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAChC,QAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAK;YACpC,IAAI;gBACA,MAAM,IAAI,GAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAC;AACpD,gBAAA,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1B,aAAA;AAAC,YAAA,OAAO,KAAK,EAAE;AACZ,gBAAA,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3B,aAAA;AAAS,oBAAA;gBACN,UAAU,CAAC,QAAQ,EAAE,CAAC;AACzB,aAAA;AACL,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;KACpC;;6GArDQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;iHAAf,eAAe,EAAA,CAAA,CAAA;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;AAyDX;;;AAGG;SACa,gBAAgB,GAAA;AAC5B,IAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAClF;;AC7EA;;AAEG;;;;"}
|