koa-boot-runtime 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.
- package/dist/aiToolRegistry.d.ts +32 -0
- package/dist/aiToolRegistry.d.ts.map +1 -0
- package/dist/aiToolRegistry.js +41 -0
- package/dist/aiToolRegistry.js.map +1 -0
- package/dist/build/routes.d.ts +3 -0
- package/dist/build/routes.d.ts.map +1 -0
- package/dist/build/routes.js +4055 -0
- package/dist/build/routes.js.map +1 -0
- package/dist/build/swagger.json +6752 -0
- package/dist/common/decorators/index.d.ts +2 -0
- package/dist/common/decorators/index.d.ts.map +1 -0
- package/dist/common/decorators/index.js +18 -0
- package/dist/common/decorators/index.js.map +1 -0
- package/dist/common/decorators/validation.d.ts +33 -0
- package/dist/common/decorators/validation.d.ts.map +1 -0
- package/dist/common/decorators/validation.js +215 -0
- package/dist/common/decorators/validation.js.map +1 -0
- package/dist/common/dto.d.ts +17 -0
- package/dist/common/dto.d.ts.map +1 -0
- package/dist/common/dto.js +28 -0
- package/dist/common/dto.js.map +1 -0
- package/dist/common/enums/base.d.ts +14 -0
- package/dist/common/enums/base.d.ts.map +1 -0
- package/dist/common/enums/base.js +14 -0
- package/dist/common/enums/base.js.map +1 -0
- package/dist/common/enums/index.d.ts +8 -0
- package/dist/common/enums/index.d.ts.map +1 -0
- package/dist/common/enums/index.js +24 -0
- package/dist/common/enums/index.js.map +1 -0
- package/dist/common/enums/system.d.ts +14 -0
- package/dist/common/enums/system.d.ts.map +1 -0
- package/dist/common/enums/system.js +14 -0
- package/dist/common/enums/system.js.map +1 -0
- package/dist/common/index.d.ts +6 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +25 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/paginate.d.ts +49 -0
- package/dist/common/paginate.d.ts.map +1 -0
- package/dist/common/paginate.js +47 -0
- package/dist/common/paginate.js.map +1 -0
- package/dist/common/types/index.d.ts +8 -0
- package/dist/common/types/index.d.ts.map +1 -0
- package/dist/common/types/index.js +18 -0
- package/dist/common/types/index.js.map +1 -0
- package/dist/common/types/pagination.d.ts +76 -0
- package/dist/common/types/pagination.d.ts.map +1 -0
- package/dist/common/types/pagination.js +29 -0
- package/dist/common/types/pagination.js.map +1 -0
- package/dist/common/types/request.d.ts +66 -0
- package/dist/common/types/request.d.ts.map +1 -0
- package/dist/common/types/request.js +4 -0
- package/dist/common/types/request.js.map +1 -0
- package/dist/common/types/response.d.ts +109 -0
- package/dist/common/types/response.d.ts.map +1 -0
- package/dist/common/types/response.js +50 -0
- package/dist/common/types/response.js.map +1 -0
- package/dist/common/types/sort.d.ts +71 -0
- package/dist/common/types/sort.d.ts.map +1 -0
- package/dist/common/types/sort.js +46 -0
- package/dist/common/types/sort.js.map +1 -0
- package/dist/config/database.d.ts +12 -0
- package/dist/config/database.d.ts.map +1 -0
- package/dist/config/database.js +24 -0
- package/dist/config/database.js.map +1 -0
- package/dist/config/index.d.ts +144 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +180 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/ioc.d.ts +6 -0
- package/dist/config/ioc.d.ts.map +1 -0
- package/dist/config/ioc.js +29 -0
- package/dist/config/ioc.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/auth.d.ts +3 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +52 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/errorHandler.d.ts +3 -0
- package/dist/middleware/errorHandler.d.ts.map +1 -0
- package/dist/middleware/errorHandler.js +40 -0
- package/dist/middleware/errorHandler.js.map +1 -0
- package/dist/middleware/logger.d.ts +3 -0
- package/dist/middleware/logger.d.ts.map +1 -0
- package/dist/middleware/logger.js +13 -0
- package/dist/middleware/logger.js.map +1 -0
- package/dist/middleware/operationLogger.d.ts +11 -0
- package/dist/middleware/operationLogger.d.ts.map +1 -0
- package/dist/middleware/operationLogger.js +155 -0
- package/dist/middleware/operationLogger.js.map +1 -0
- package/dist/middleware/permission.d.ts +23 -0
- package/dist/middleware/permission.d.ts.map +1 -0
- package/dist/middleware/permission.js +153 -0
- package/dist/middleware/permission.js.map +1 -0
- package/dist/middleware/validate.d.ts +7 -0
- package/dist/middleware/validate.d.ts.map +1 -0
- package/dist/middleware/validate.js +53 -0
- package/dist/middleware/validate.js.map +1 -0
- package/dist/middlewares.d.ts +15 -0
- package/dist/middlewares.d.ts.map +1 -0
- package/dist/middlewares.js +24 -0
- package/dist/middlewares.js.map +1 -0
- package/dist/registerRoutes.d.ts +15 -0
- package/dist/registerRoutes.d.ts.map +1 -0
- package/dist/registerRoutes.js +83 -0
- package/dist/registerRoutes.js.map +1 -0
- package/dist/system/department/department.controller.d.ts +46 -0
- package/dist/system/department/department.controller.d.ts.map +1 -0
- package/dist/system/department/department.controller.js +203 -0
- package/dist/system/department/department.controller.js.map +1 -0
- package/dist/system/department/department.model.d.ts +33 -0
- package/dist/system/department/department.model.d.ts.map +1 -0
- package/dist/system/department/department.model.js +171 -0
- package/dist/system/department/department.model.js.map +1 -0
- package/dist/system/department/department.service.d.ts +40 -0
- package/dist/system/department/department.service.d.ts.map +1 -0
- package/dist/system/department/department.service.js +99 -0
- package/dist/system/department/department.service.js.map +1 -0
- package/dist/system/dictItem/dictItem.controller.d.ts +42 -0
- package/dist/system/dictItem/dictItem.controller.d.ts.map +1 -0
- package/dist/system/dictItem/dictItem.controller.js +167 -0
- package/dist/system/dictItem/dictItem.controller.js.map +1 -0
- package/dist/system/dictItem/dictItem.model.d.ts +38 -0
- package/dist/system/dictItem/dictItem.model.d.ts.map +1 -0
- package/dist/system/dictItem/dictItem.model.js +180 -0
- package/dist/system/dictItem/dictItem.model.js.map +1 -0
- package/dist/system/dictItem/dictItem.service.d.ts +33 -0
- package/dist/system/dictItem/dictItem.service.d.ts.map +1 -0
- package/dist/system/dictItem/dictItem.service.js +97 -0
- package/dist/system/dictItem/dictItem.service.js.map +1 -0
- package/dist/system/dictType/dictType.controller.d.ts +47 -0
- package/dist/system/dictType/dictType.controller.d.ts.map +1 -0
- package/dist/system/dictType/dictType.controller.js +174 -0
- package/dist/system/dictType/dictType.controller.js.map +1 -0
- package/dist/system/dictType/dictType.model.d.ts +31 -0
- package/dist/system/dictType/dictType.model.d.ts.map +1 -0
- package/dist/system/dictType/dictType.model.js +127 -0
- package/dist/system/dictType/dictType.model.js.map +1 -0
- package/dist/system/dictType/dictType.service.d.ts +27 -0
- package/dist/system/dictType/dictType.service.d.ts.map +1 -0
- package/dist/system/dictType/dictType.service.js +74 -0
- package/dist/system/dictType/dictType.service.js.map +1 -0
- package/dist/system/employee/employee.controller.d.ts +16 -0
- package/dist/system/employee/employee.controller.d.ts.map +1 -0
- package/dist/system/employee/employee.controller.js +111 -0
- package/dist/system/employee/employee.controller.js.map +1 -0
- package/dist/system/employee/employee.model.d.ts +34 -0
- package/dist/system/employee/employee.model.d.ts.map +1 -0
- package/dist/system/employee/employee.model.js +186 -0
- package/dist/system/employee/employee.model.js.map +1 -0
- package/dist/system/employee/employee.service.d.ts +16 -0
- package/dist/system/employee/employee.service.d.ts.map +1 -0
- package/dist/system/employee/employee.service.js +49 -0
- package/dist/system/employee/employee.service.js.map +1 -0
- package/dist/system/fileUpload/fileUpload.controller.d.ts +35 -0
- package/dist/system/fileUpload/fileUpload.controller.d.ts.map +1 -0
- package/dist/system/fileUpload/fileUpload.controller.js +228 -0
- package/dist/system/fileUpload/fileUpload.controller.js.map +1 -0
- package/dist/system/fileUpload/fileUpload.model.d.ts +13 -0
- package/dist/system/fileUpload/fileUpload.model.d.ts.map +1 -0
- package/dist/system/fileUpload/fileUpload.model.js +71 -0
- package/dist/system/fileUpload/fileUpload.model.js.map +1 -0
- package/dist/system/fileUpload/fileUpload.service.d.ts +29 -0
- package/dist/system/fileUpload/fileUpload.service.d.ts.map +1 -0
- package/dist/system/fileUpload/fileUpload.service.js +61 -0
- package/dist/system/fileUpload/fileUpload.service.js.map +1 -0
- package/dist/system/loginLog/loginLog.controller.d.ts +21 -0
- package/dist/system/loginLog/loginLog.controller.d.ts.map +1 -0
- package/dist/system/loginLog/loginLog.controller.js +149 -0
- package/dist/system/loginLog/loginLog.controller.js.map +1 -0
- package/dist/system/loginLog/loginLog.model.d.ts +26 -0
- package/dist/system/loginLog/loginLog.model.d.ts.map +1 -0
- package/dist/system/loginLog/loginLog.model.js +150 -0
- package/dist/system/loginLog/loginLog.model.js.map +1 -0
- package/dist/system/loginLog/loginLog.service.d.ts +24 -0
- package/dist/system/loginLog/loginLog.service.d.ts.map +1 -0
- package/dist/system/loginLog/loginLog.service.js +87 -0
- package/dist/system/loginLog/loginLog.service.js.map +1 -0
- package/dist/system/menu/menu.controller.d.ts +46 -0
- package/dist/system/menu/menu.controller.d.ts.map +1 -0
- package/dist/system/menu/menu.controller.js +203 -0
- package/dist/system/menu/menu.controller.js.map +1 -0
- package/dist/system/menu/menu.model.d.ts +45 -0
- package/dist/system/menu/menu.model.d.ts.map +1 -0
- package/dist/system/menu/menu.model.js +254 -0
- package/dist/system/menu/menu.model.js.map +1 -0
- package/dist/system/menu/menu.service.d.ts +40 -0
- package/dist/system/menu/menu.service.d.ts.map +1 -0
- package/dist/system/menu/menu.service.js +101 -0
- package/dist/system/menu/menu.service.js.map +1 -0
- package/dist/system/operationLog/operationLog.controller.d.ts +34 -0
- package/dist/system/operationLog/operationLog.controller.d.ts.map +1 -0
- package/dist/system/operationLog/operationLog.controller.js +126 -0
- package/dist/system/operationLog/operationLog.controller.js.map +1 -0
- package/dist/system/operationLog/operationLog.model.d.ts +38 -0
- package/dist/system/operationLog/operationLog.model.d.ts.map +1 -0
- package/dist/system/operationLog/operationLog.model.js +224 -0
- package/dist/system/operationLog/operationLog.model.js.map +1 -0
- package/dist/system/operationLog/operationLog.service.d.ts +46 -0
- package/dist/system/operationLog/operationLog.service.d.ts.map +1 -0
- package/dist/system/operationLog/operationLog.service.js +109 -0
- package/dist/system/operationLog/operationLog.service.js.map +1 -0
- package/dist/system/permission/permission.controller.d.ts +18 -0
- package/dist/system/permission/permission.controller.d.ts.map +1 -0
- package/dist/system/permission/permission.controller.js +160 -0
- package/dist/system/permission/permission.controller.js.map +1 -0
- package/dist/system/permission/permission.model.d.ts +39 -0
- package/dist/system/permission/permission.model.d.ts.map +1 -0
- package/dist/system/permission/permission.model.js +220 -0
- package/dist/system/permission/permission.model.js.map +1 -0
- package/dist/system/permission/permission.service.d.ts +40 -0
- package/dist/system/permission/permission.service.d.ts.map +1 -0
- package/dist/system/permission/permission.service.js +105 -0
- package/dist/system/permission/permission.service.js.map +1 -0
- package/dist/system/role/role.controller.d.ts +16 -0
- package/dist/system/role/role.controller.d.ts.map +1 -0
- package/dist/system/role/role.controller.js +123 -0
- package/dist/system/role/role.controller.js.map +1 -0
- package/dist/system/role/role.model.d.ts +25 -0
- package/dist/system/role/role.model.d.ts.map +1 -0
- package/dist/system/role/role.model.js +133 -0
- package/dist/system/role/role.model.js.map +1 -0
- package/dist/system/role/role.service.d.ts +17 -0
- package/dist/system/role/role.service.d.ts.map +1 -0
- package/dist/system/role/role.service.js +50 -0
- package/dist/system/role/role.service.js.map +1 -0
- package/dist/system/roleMenu/roleMenu.controller.d.ts +26 -0
- package/dist/system/roleMenu/roleMenu.controller.d.ts.map +1 -0
- package/dist/system/roleMenu/roleMenu.controller.js +83 -0
- package/dist/system/roleMenu/roleMenu.controller.js.map +1 -0
- package/dist/system/roleMenu/roleMenu.model.d.ts +35 -0
- package/dist/system/roleMenu/roleMenu.model.d.ts.map +1 -0
- package/dist/system/roleMenu/roleMenu.model.js +56 -0
- package/dist/system/roleMenu/roleMenu.model.js.map +1 -0
- package/dist/system/roleMenu/roleMenu.service.d.ts +35 -0
- package/dist/system/roleMenu/roleMenu.service.d.ts.map +1 -0
- package/dist/system/roleMenu/roleMenu.service.js +77 -0
- package/dist/system/roleMenu/roleMenu.service.js.map +1 -0
- package/dist/system/rolePermission/rolePermission.controller.d.ts +36 -0
- package/dist/system/rolePermission/rolePermission.controller.d.ts.map +1 -0
- package/dist/system/rolePermission/rolePermission.controller.js +115 -0
- package/dist/system/rolePermission/rolePermission.controller.js.map +1 -0
- package/dist/system/rolePermission/rolePermission.model.d.ts +45 -0
- package/dist/system/rolePermission/rolePermission.model.d.ts.map +1 -0
- package/dist/system/rolePermission/rolePermission.model.js +87 -0
- package/dist/system/rolePermission/rolePermission.model.js.map +1 -0
- package/dist/system/rolePermission/rolePermission.service.d.ts +50 -0
- package/dist/system/rolePermission/rolePermission.service.d.ts.map +1 -0
- package/dist/system/rolePermission/rolePermission.service.js +110 -0
- package/dist/system/rolePermission/rolePermission.service.js.map +1 -0
- package/dist/system/user/user.controller.d.ts +66 -0
- package/dist/system/user/user.controller.d.ts.map +1 -0
- package/dist/system/user/user.controller.js +322 -0
- package/dist/system/user/user.controller.js.map +1 -0
- package/dist/system/user/user.model.d.ts +58 -0
- package/dist/system/user/user.model.d.ts.map +1 -0
- package/dist/system/user/user.model.js +225 -0
- package/dist/system/user/user.model.js.map +1 -0
- package/dist/system/user/user.service.d.ts +73 -0
- package/dist/system/user/user.service.d.ts.map +1 -0
- package/dist/system/user/user.service.js +388 -0
- package/dist/system/user/user.service.js.map +1 -0
- package/dist/system/userRole/userRole.controller.d.ts +33 -0
- package/dist/system/userRole/userRole.controller.d.ts.map +1 -0
- package/dist/system/userRole/userRole.controller.js +231 -0
- package/dist/system/userRole/userRole.controller.js.map +1 -0
- package/dist/system/userRole/userRole.model.d.ts +14 -0
- package/dist/system/userRole/userRole.model.d.ts.map +1 -0
- package/dist/system/userRole/userRole.model.js +58 -0
- package/dist/system/userRole/userRole.model.js.map +1 -0
- package/dist/system/userRole/userRole.service.d.ts +29 -0
- package/dist/system/userRole/userRole.service.d.ts.map +1 -0
- package/dist/system/userRole/userRole.service.js +135 -0
- package/dist/system/userRole/userRole.service.js.map +1 -0
- package/dist/systemServices.d.ts +23 -0
- package/dist/systemServices.d.ts.map +1 -0
- package/dist/systemServices.js +40 -0
- package/dist/systemServices.js.map +1 -0
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +70 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/aiClient.d.ts +55 -0
- package/dist/utils/aiClient.d.ts.map +1 -0
- package/dist/utils/aiClient.js +59 -0
- package/dist/utils/aiClient.js.map +1 -0
- package/dist/utils/banner.d.ts +10 -0
- package/dist/utils/banner.d.ts.map +1 -0
- package/dist/utils/banner.js +40 -0
- package/dist/utils/banner.js.map +1 -0
- package/dist/utils/crypto.d.ts +49 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +113 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/dataScope.d.ts +41 -0
- package/dist/utils/dataScope.d.ts.map +1 -0
- package/dist/utils/dataScope.js +130 -0
- package/dist/utils/dataScope.js.map +1 -0
- package/dist/utils/date.d.ts +48 -0
- package/dist/utils/date.d.ts.map +1 -0
- package/dist/utils/date.js +145 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/emailClient.d.ts +15 -0
- package/dist/utils/emailClient.d.ts.map +1 -0
- package/dist/utils/emailClient.js +71 -0
- package/dist/utils/emailClient.js.map +1 -0
- package/dist/utils/jwt.d.ts +10 -0
- package/dist/utils/jwt.d.ts.map +1 -0
- package/dist/utils/jwt.js +31 -0
- package/dist/utils/jwt.js.map +1 -0
- package/dist/utils/logger.d.ts +34 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +108 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/ossClient.d.ts +38 -0
- package/dist/utils/ossClient.d.ts.map +1 -0
- package/dist/utils/ossClient.js +92 -0
- package/dist/utils/ossClient.js.map +1 -0
- package/dist/utils/permissionSync.d.ts +10 -0
- package/dist/utils/permissionSync.d.ts.map +1 -0
- package/dist/utils/permissionSync.js +11 -0
- package/dist/utils/permissionSync.js.map +1 -0
- package/dist/utils/redisClient.d.ts +91 -0
- package/dist/utils/redisClient.d.ts.map +1 -0
- package/dist/utils/redisClient.js +246 -0
- package/dist/utils/redisClient.js.map +1 -0
- package/dist/utils/sequence.d.ts +53 -0
- package/dist/utils/sequence.d.ts.map +1 -0
- package/dist/utils/sequence.js +109 -0
- package/dist/utils/sequence.js.map +1 -0
- package/dist/utils/smsClient.d.ts +15 -0
- package/dist/utils/smsClient.d.ts.map +1 -0
- package/dist/utils/smsClient.js +115 -0
- package/dist/utils/smsClient.js.map +1 -0
- package/dist/utils/supabaseClient.d.ts +5 -0
- package/dist/utils/supabaseClient.d.ts.map +1 -0
- package/dist/utils/supabaseClient.js +17 -0
- package/dist/utils/supabaseClient.js.map +1 -0
- package/dist/utils/unipushClient.d.ts +12 -0
- package/dist/utils/unipushClient.d.ts.map +1 -0
- package/dist/utils/unipushClient.js +109 -0
- package/dist/utils/unipushClient.js.map +1 -0
- package/dist/utils/validator.d.ts +74 -0
- package/dist/utils/validator.d.ts.map +1 -0
- package/dist/utils/validator.js +173 -0
- package/dist/utils/validator.js.map +1 -0
- package/dist/utils/wecom.d.ts +20 -0
- package/dist/utils/wecom.d.ts.map +1 -0
- package/dist/utils/wecom.js +126 -0
- package/dist/utils/wecom.js.map +1 -0
- package/package.json +84 -0
- package/templates/schema.system.prisma +283 -0
package/dist/types.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
+
};
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.userRole = exports.user = exports.rolePermission = exports.roleMenu = exports.role = exports.permission = exports.operationLog = exports.menu = exports.loginLog = exports.fileUpload = exports.employee = exports.dictType = exports.dictItem = exports.department = exports.normalizeDto = exports.paginateQuery = exports.decorators = exports.enums = void 0;
|
|
40
|
+
/**
|
|
41
|
+
* 类型聚合导出(供用户 import type 引用)。
|
|
42
|
+
*
|
|
43
|
+
* 示例:
|
|
44
|
+
* import { types } from 'koa-boot-runtime';
|
|
45
|
+
* import type { types as KBRTypes } from 'koa-boot-runtime';
|
|
46
|
+
* const u: KBRTypes.user.User = ...;
|
|
47
|
+
*/
|
|
48
|
+
__exportStar(require("./common/types"), exports);
|
|
49
|
+
exports.enums = __importStar(require("./common/enums"));
|
|
50
|
+
exports.decorators = __importStar(require("./common/decorators"));
|
|
51
|
+
var paginate_1 = require("./common/paginate");
|
|
52
|
+
Object.defineProperty(exports, "paginateQuery", { enumerable: true, get: function () { return paginate_1.paginateQuery; } });
|
|
53
|
+
var dto_1 = require("./common/dto");
|
|
54
|
+
Object.defineProperty(exports, "normalizeDto", { enumerable: true, get: function () { return dto_1.normalizeDto; } });
|
|
55
|
+
// ===== 系统核心表只读类型(用户可 import type 引用,业务 DTO 由用户自定义)=====
|
|
56
|
+
exports.department = __importStar(require("./system/department/department.model"));
|
|
57
|
+
exports.dictItem = __importStar(require("./system/dictItem/dictItem.model"));
|
|
58
|
+
exports.dictType = __importStar(require("./system/dictType/dictType.model"));
|
|
59
|
+
exports.employee = __importStar(require("./system/employee/employee.model"));
|
|
60
|
+
exports.fileUpload = __importStar(require("./system/fileUpload/fileUpload.model"));
|
|
61
|
+
exports.loginLog = __importStar(require("./system/loginLog/loginLog.model"));
|
|
62
|
+
exports.menu = __importStar(require("./system/menu/menu.model"));
|
|
63
|
+
exports.operationLog = __importStar(require("./system/operationLog/operationLog.model"));
|
|
64
|
+
exports.permission = __importStar(require("./system/permission/permission.model"));
|
|
65
|
+
exports.role = __importStar(require("./system/role/role.model"));
|
|
66
|
+
exports.roleMenu = __importStar(require("./system/roleMenu/roleMenu.model"));
|
|
67
|
+
exports.rolePermission = __importStar(require("./system/rolePermission/rolePermission.model"));
|
|
68
|
+
exports.user = __importStar(require("./system/user/user.model"));
|
|
69
|
+
exports.userRole = __importStar(require("./system/userRole/userRole.model"));
|
|
70
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;GAOG;AACH,iDAA+B;AAC/B,wDAAwC;AACxC,kEAAkD;AAClD,8CAAkD;AAAzC,yGAAA,aAAa,OAAA;AAEtB,oCAA4C;AAAnC,mGAAA,YAAY,OAAA;AAErB,yDAAyD;AACzD,mFAAmE;AACnE,6EAA6D;AAC7D,6EAA6D;AAC7D,6EAA6D;AAC7D,mFAAmE;AACnE,6EAA6D;AAC7D,iEAAiD;AACjD,yFAAyE;AACzE,mFAAmE;AACnE,iEAAiD;AACjD,6EAA6D;AAC7D,+FAA+E;AAC/E,iEAAiD;AACjD,6EAA6D"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** OpenAI 兼容对话消息 */
|
|
2
|
+
export interface AiMessage {
|
|
3
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
4
|
+
content: string | null;
|
|
5
|
+
/** tool 角色消息必须携带,关联 assistant 返回的 tool_call_id */
|
|
6
|
+
tool_call_id?: string;
|
|
7
|
+
/** assistant 角色携带,透传模型返回的工具调用指令(二次请求必须原样回传) */
|
|
8
|
+
tool_calls?: AiToolCall[];
|
|
9
|
+
/**
|
|
10
|
+
* assistant 角色携带,思考模式(thinking)下的推理内容。
|
|
11
|
+
* DeepSeek V4 / 通义千问 thinking / GLM thinking 等厂商要求原样回传,否则 400。
|
|
12
|
+
*/
|
|
13
|
+
reasoning_content?: string;
|
|
14
|
+
}
|
|
15
|
+
/** 模型返回的工具调用指令(只决定"调哪个工具 + 参数",不负责执行) */
|
|
16
|
+
export interface AiToolCall {
|
|
17
|
+
id: string;
|
|
18
|
+
type: 'function';
|
|
19
|
+
function: {
|
|
20
|
+
name: string;
|
|
21
|
+
arguments: string;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/** 工具定义(JSON Schema,随请求发给模型作为"说明书") */
|
|
25
|
+
export interface AiToolDef {
|
|
26
|
+
type: 'function';
|
|
27
|
+
function: {
|
|
28
|
+
name: string;
|
|
29
|
+
description: string;
|
|
30
|
+
parameters: Record<string, unknown>;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export interface AiChatOptions {
|
|
34
|
+
messages: AiMessage[];
|
|
35
|
+
tools?: AiToolDef[];
|
|
36
|
+
temperature?: number;
|
|
37
|
+
maxTokens?: number;
|
|
38
|
+
}
|
|
39
|
+
export interface AiChatResult {
|
|
40
|
+
content: string | null;
|
|
41
|
+
toolCalls: AiToolCall[];
|
|
42
|
+
/** 思考模式下的推理内容(供调用方在下一轮请求中原样回传) */
|
|
43
|
+
reasoningContent?: string | null;
|
|
44
|
+
}
|
|
45
|
+
/** AI 开关与凭证检查 */
|
|
46
|
+
export declare function isAiConfigured(): {
|
|
47
|
+
ok: boolean;
|
|
48
|
+
reason?: string;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* 调用 Chat Completions(非流式,OpenAI 兼容协议)。
|
|
52
|
+
* 模型返回的 toolCalls 仅为"调用意图",由调用方解析后执行真实查询并回填 tool 消息。
|
|
53
|
+
*/
|
|
54
|
+
export declare function aiChat(options: AiChatOptions): Promise<AiChatResult>;
|
|
55
|
+
//# sourceMappingURL=aiClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiClient.d.ts","sourceRoot":"","sources":["../../src/utils/aiClient.ts"],"names":[],"mappings":"AAKA,oBAAoB;AACpB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;IAC1B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,yCAAyC;AACzC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,uCAAuC;AACvC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,iBAAiB;AACjB,wBAAgB,cAAc,IAAI;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAKjE;AAED;;;GAGG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAyC1E"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isAiConfigured = isAiConfigured;
|
|
7
|
+
exports.aiChat = aiChat;
|
|
8
|
+
// 通用 OpenAI 兼容 AI 客户端:支持任意提供 /chat/completions 的厂商
|
|
9
|
+
// 换厂商只需改环境变量 AI_BASE_URL / AI_API_KEY / AI_MODEL,无需改动代码
|
|
10
|
+
// 已知兼容厂商:DeepSeek、OpenAI、Kimi(Moonshot)、智谱GLM、通义千问(DashScope)、豆包(火山方舟) 等
|
|
11
|
+
const config_1 = __importDefault(require("../config"));
|
|
12
|
+
/** AI 开关与凭证检查 */
|
|
13
|
+
function isAiConfigured() {
|
|
14
|
+
const { enabled, apiKey } = config_1.default.ai;
|
|
15
|
+
if (!enabled)
|
|
16
|
+
return { ok: false, reason: 'AI 助手未启用(服务端未设置 AI_ENABLED=true)' };
|
|
17
|
+
if (!apiKey)
|
|
18
|
+
return { ok: false, reason: 'AI 助手未配置密钥(服务端未设置 AI_API_KEY)' };
|
|
19
|
+
return { ok: true };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 调用 Chat Completions(非流式,OpenAI 兼容协议)。
|
|
23
|
+
* 模型返回的 toolCalls 仅为"调用意图",由调用方解析后执行真实查询并回填 tool 消息。
|
|
24
|
+
*/
|
|
25
|
+
async function aiChat(options) {
|
|
26
|
+
const { baseUrl, apiKey, model, extraBody } = config_1.default.ai;
|
|
27
|
+
const hasTools = !!options.tools?.length;
|
|
28
|
+
const res = await fetch(`${baseUrl.replace(/\/+$/, '')}/chat/completions`, {
|
|
29
|
+
method: 'POST',
|
|
30
|
+
headers: {
|
|
31
|
+
'Content-Type': 'application/json',
|
|
32
|
+
Authorization: `Bearer ${apiKey}`,
|
|
33
|
+
},
|
|
34
|
+
body: JSON.stringify({
|
|
35
|
+
model,
|
|
36
|
+
messages: options.messages,
|
|
37
|
+
tools: hasTools ? options.tools : undefined,
|
|
38
|
+
tool_choice: hasTools ? 'auto' : undefined,
|
|
39
|
+
temperature: options.temperature ?? 0.3,
|
|
40
|
+
max_tokens: options.maxTokens ?? 2048,
|
|
41
|
+
stream: false,
|
|
42
|
+
// 厂商扩展参数透传(如 DeepSeek V4 Pro 的 thinking 开关),未配置时为空
|
|
43
|
+
...(extraBody ?? {}),
|
|
44
|
+
}),
|
|
45
|
+
});
|
|
46
|
+
if (!res.ok) {
|
|
47
|
+
const text = await res.text().catch(() => '');
|
|
48
|
+
throw new Error(`[ai] HTTP ${res.status} ${res.statusText} ${text.slice(0, 300)}`);
|
|
49
|
+
}
|
|
50
|
+
const data = (await res.json());
|
|
51
|
+
const message = data?.choices?.[0]?.message;
|
|
52
|
+
return {
|
|
53
|
+
content: message?.content ?? null,
|
|
54
|
+
toolCalls: message?.tool_calls ?? [],
|
|
55
|
+
// 思考模式的推理内容,原样透出供下一轮回传(厂商无关客户端不应丢弃未知字段)
|
|
56
|
+
reasoningContent: message?.reasoning_content ?? null,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=aiClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiClient.js","sourceRoot":"","sources":["../../src/utils/aiClient.ts"],"names":[],"mappings":";;;;;AAoDA,wCAKC;AAMD,wBAyCC;AAxGD,mDAAmD;AACnD,wDAAwD;AACxD,yEAAyE;AACzE,uDAA+B;AAgD/B,iBAAiB;AACjB,SAAgB,cAAc;IAC5B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,gBAAM,CAAC,EAAE,CAAC;IACtC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kCAAkC,EAAE,CAAC;IAC/E,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;IAC3E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,MAAM,CAAC,OAAsB;IACjD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,gBAAM,CAAC,EAAE,CAAC;IACxD,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;IACzC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,EAAE;QACzE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,MAAM,EAAE;SAClC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK;YACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YAC3C,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC1C,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;YACvC,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;YACrC,MAAM,EAAE,KAAK;YACb,mDAAmD;YACnD,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;SACrB,CAAC;KACH,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAQ7B,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;IAC5C,OAAO;QACL,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI;QACjC,SAAS,EAAE,OAAO,EAAE,UAAU,IAAI,EAAE;QACpC,wCAAwC;QACxC,gBAAgB,EAAE,OAAO,EAAE,iBAAiB,IAAI,IAAI;KACrD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/utils/banner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAavD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 启动 Banner 模块
|
|
4
|
+
*
|
|
5
|
+
* 在服务启动时输出品牌标识和技术栈信息
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.printBanner = printBanner;
|
|
9
|
+
const BANNER = `
|
|
10
|
+
██╗ ██╗ ██████╗ █████╗ ██████╗ ██████╗ ██████╗ ████████╗
|
|
11
|
+
██║ ██╔╝██╔═══██╗██╔══██╗██╔══██╗██╔═══██╗██╔═══██╗╚══██╔══╝
|
|
12
|
+
█████╔╝ ██║ ██║███████║██████╔╝██║ ██║██║ ██║ ██║
|
|
13
|
+
██╔═██╗ ██║ ██║██╔══██║██╔══██╗██║ ██║██║ ██║ ██║
|
|
14
|
+
██║ ██╗╚██████╔╝██║ ██║██████╔╝╚██████╔╝╚██████╔╝ ██║
|
|
15
|
+
╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝ ╚═════╝ ╚═════╝ ╚═╝
|
|
16
|
+
`;
|
|
17
|
+
const VERSION = '1.0.0';
|
|
18
|
+
const TECH_STACK = [
|
|
19
|
+
'Koa v3',
|
|
20
|
+
'Prisma',
|
|
21
|
+
'tsoa',
|
|
22
|
+
'Redis',
|
|
23
|
+
];
|
|
24
|
+
/**
|
|
25
|
+
* 输出启动 Banner
|
|
26
|
+
*/
|
|
27
|
+
function printBanner(port) {
|
|
28
|
+
const lines = [
|
|
29
|
+
'',
|
|
30
|
+
BANNER,
|
|
31
|
+
` Enterprise Admin System · v${VERSION}`,
|
|
32
|
+
` ${TECH_STACK.join(' + ')}`,
|
|
33
|
+
'',
|
|
34
|
+
` → Local: http://localhost:${port}`,
|
|
35
|
+
` → Docs: http://localhost:${port}/docs`,
|
|
36
|
+
'',
|
|
37
|
+
];
|
|
38
|
+
console.log(lines.join('\n'));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/utils/banner.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAuBH,kCAaC;AAlCD,MAAM,MAAM,GAAG;;;;;;;CAOd,CAAC;AAEF,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,UAAU,GAAG;IACjB,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,OAAO;CACR,CAAC;AAEF;;GAEG;AACH,SAAgB,WAAW,CAAC,IAAqB;IAC/C,MAAM,KAAK,GAAG;QACZ,EAAE;QACF,MAAM;QACN,gCAAgC,OAAO,EAAE;QACzC,KAAK,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC7B,EAAE;QACF,iCAAiC,IAAI,EAAE;QACvC,iCAAiC,IAAI,OAAO;QAC5C,EAAE;KACH,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 简单哈希(不可逆,适用于非敏感数据签名、校验)
|
|
3
|
+
*/
|
|
4
|
+
export declare function hash(value: string, algorithm?: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* MD5 哈希快捷方法
|
|
7
|
+
*/
|
|
8
|
+
export declare function md5(value: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* SHA256 哈希
|
|
11
|
+
*/
|
|
12
|
+
export declare function sha256(value: string): string;
|
|
13
|
+
export interface PasswordHashResult {
|
|
14
|
+
hash: string;
|
|
15
|
+
salt: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 使用 PBKDF2 加密密码(安全等级高,适合生产环境)
|
|
19
|
+
*/
|
|
20
|
+
export declare function hashPassword(password: string, salt?: string): PasswordHashResult;
|
|
21
|
+
/**
|
|
22
|
+
* 验证密码是否匹配
|
|
23
|
+
*/
|
|
24
|
+
export declare function verifyPassword(password: string, hashedPassword: string, salt: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* 生成 HMAC 签名
|
|
27
|
+
*/
|
|
28
|
+
export declare function hmacSign(data: string, secret: string, algorithm?: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* 验证 HMAC 签名
|
|
31
|
+
*/
|
|
32
|
+
export declare function hmacVerify(data: string, signature: string, secret: string, algorithm?: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* AES-256-CBC 加密
|
|
35
|
+
*/
|
|
36
|
+
export declare function aesEncrypt(plaintext: string, secretKey: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* AES-256-CBC 解密
|
|
39
|
+
*/
|
|
40
|
+
export declare function aesDecrypt(ciphertext: string, secretKey: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* 生成随机字符串
|
|
43
|
+
*/
|
|
44
|
+
export declare function randomString(length?: number): string;
|
|
45
|
+
/**
|
|
46
|
+
* 生成 UUID v4
|
|
47
|
+
*/
|
|
48
|
+
export declare function uuid(): string;
|
|
49
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,MAA+B,GAAG,MAAM,CAEtF;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5C;AAID,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAMhF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG9F;AAID;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAE,MAAiB,GAAG,MAAM,CAE3F;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAE,MAAiB,GAAG,OAAO,CAGjH;AAOD;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAOvE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQxE;AAID;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,IAAI,IAAI,MAAM,CAE7B"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.hash = hash;
|
|
7
|
+
exports.md5 = md5;
|
|
8
|
+
exports.sha256 = sha256;
|
|
9
|
+
exports.hashPassword = hashPassword;
|
|
10
|
+
exports.verifyPassword = verifyPassword;
|
|
11
|
+
exports.hmacSign = hmacSign;
|
|
12
|
+
exports.hmacVerify = hmacVerify;
|
|
13
|
+
exports.aesEncrypt = aesEncrypt;
|
|
14
|
+
exports.aesDecrypt = aesDecrypt;
|
|
15
|
+
exports.randomString = randomString;
|
|
16
|
+
exports.uuid = uuid;
|
|
17
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
18
|
+
// ============ 配置 ============
|
|
19
|
+
const DEFAULT_HASH_ALGORITHM = 'md5';
|
|
20
|
+
const DEFAULT_SALT_LENGTH = 16;
|
|
21
|
+
const DEFAULT_ITERATIONS = 10000;
|
|
22
|
+
const DEFAULT_KEY_LENGTH = 64;
|
|
23
|
+
const DEFAULT_DIGEST = 'hex';
|
|
24
|
+
// ============ 哈希 ============
|
|
25
|
+
/**
|
|
26
|
+
* 简单哈希(不可逆,适用于非敏感数据签名、校验)
|
|
27
|
+
*/
|
|
28
|
+
function hash(value, algorithm = DEFAULT_HASH_ALGORITHM) {
|
|
29
|
+
return crypto_1.default.createHash(algorithm).update(value).digest(DEFAULT_DIGEST);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* MD5 哈希快捷方法
|
|
33
|
+
*/
|
|
34
|
+
function md5(value) {
|
|
35
|
+
return hash(value, 'md5');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* SHA256 哈希
|
|
39
|
+
*/
|
|
40
|
+
function sha256(value) {
|
|
41
|
+
return hash(value, 'sha256');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 使用 PBKDF2 加密密码(安全等级高,适合生产环境)
|
|
45
|
+
*/
|
|
46
|
+
function hashPassword(password, salt) {
|
|
47
|
+
const actualSalt = salt || crypto_1.default.randomBytes(DEFAULT_SALT_LENGTH).toString(DEFAULT_DIGEST);
|
|
48
|
+
const derivedKey = crypto_1.default
|
|
49
|
+
.pbkdf2Sync(password, actualSalt, DEFAULT_ITERATIONS, DEFAULT_KEY_LENGTH, 'sha512')
|
|
50
|
+
.toString(DEFAULT_DIGEST);
|
|
51
|
+
return { hash: derivedKey, salt: actualSalt };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 验证密码是否匹配
|
|
55
|
+
*/
|
|
56
|
+
function verifyPassword(password, hashedPassword, salt) {
|
|
57
|
+
const { hash } = hashPassword(password, salt);
|
|
58
|
+
return hash === hashedPassword;
|
|
59
|
+
}
|
|
60
|
+
// ============ HMAC 签名 ============
|
|
61
|
+
/**
|
|
62
|
+
* 生成 HMAC 签名
|
|
63
|
+
*/
|
|
64
|
+
function hmacSign(data, secret, algorithm = 'sha256') {
|
|
65
|
+
return crypto_1.default.createHmac(algorithm, secret).update(data).digest(DEFAULT_DIGEST);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 验证 HMAC 签名
|
|
69
|
+
*/
|
|
70
|
+
function hmacVerify(data, signature, secret, algorithm = 'sha256') {
|
|
71
|
+
const expected = hmacSign(data, secret, algorithm);
|
|
72
|
+
return crypto_1.default.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
|
|
73
|
+
}
|
|
74
|
+
// ============ 对称加解密(AES) ============
|
|
75
|
+
const AES_ALGORITHM = 'aes-256-cbc';
|
|
76
|
+
const IV_LENGTH = 16;
|
|
77
|
+
/**
|
|
78
|
+
* AES-256-CBC 加密
|
|
79
|
+
*/
|
|
80
|
+
function aesEncrypt(plaintext, secretKey) {
|
|
81
|
+
const key = crypto_1.default.createHash('sha256').update(secretKey).digest();
|
|
82
|
+
const iv = crypto_1.default.randomBytes(IV_LENGTH);
|
|
83
|
+
const cipher = crypto_1.default.createCipheriv(AES_ALGORITHM, key, iv);
|
|
84
|
+
const encrypted = Buffer.concat([cipher.update(plaintext, 'utf8'), cipher.final()]);
|
|
85
|
+
// 输出格式: iv:encrypted (均为 hex)
|
|
86
|
+
return `${iv.toString(DEFAULT_DIGEST)}:${encrypted.toString(DEFAULT_DIGEST)}`;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* AES-256-CBC 解密
|
|
90
|
+
*/
|
|
91
|
+
function aesDecrypt(ciphertext, secretKey) {
|
|
92
|
+
const key = crypto_1.default.createHash('sha256').update(secretKey).digest();
|
|
93
|
+
const [ivHex, encryptedHex] = ciphertext.split(':');
|
|
94
|
+
const iv = Buffer.from(ivHex, DEFAULT_DIGEST);
|
|
95
|
+
const encrypted = Buffer.from(encryptedHex, DEFAULT_DIGEST);
|
|
96
|
+
const decipher = crypto_1.default.createDecipheriv(AES_ALGORITHM, key, iv);
|
|
97
|
+
const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]);
|
|
98
|
+
return decrypted.toString('utf8');
|
|
99
|
+
}
|
|
100
|
+
// ============ 随机值 ============
|
|
101
|
+
/**
|
|
102
|
+
* 生成随机字符串
|
|
103
|
+
*/
|
|
104
|
+
function randomString(length = 32) {
|
|
105
|
+
return crypto_1.default.randomBytes(Math.ceil(length / 2)).toString(DEFAULT_DIGEST).slice(0, length);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 生成 UUID v4
|
|
109
|
+
*/
|
|
110
|
+
function uuid() {
|
|
111
|
+
return crypto_1.default.randomUUID();
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":";;;;;AAeA,oBAEC;AAKD,kBAEC;AAKD,wBAEC;AAYD,oCAMC;AAKD,wCAGC;AAOD,4BAEC;AAKD,gCAGC;AAUD,gCAOC;AAKD,gCAQC;AAOD,oCAEC;AAKD,oBAEC;AAxHD,oDAA4B;AAE5B,+BAA+B;AAE/B,MAAM,sBAAsB,GAAG,KAAK,CAAC;AACrC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B,+BAA+B;AAE/B;;GAEG;AACH,SAAgB,IAAI,CAAC,KAAa,EAAE,YAAoB,sBAAsB;IAC5E,OAAO,gBAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,SAAgB,GAAG,CAAC,KAAa;IAC/B,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAgB,MAAM,CAAC,KAAa;IAClC,OAAO,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC;AASD;;GAEG;AACH,SAAgB,YAAY,CAAC,QAAgB,EAAE,IAAa;IAC1D,MAAM,UAAU,GAAG,IAAI,IAAI,gBAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC5F,MAAM,UAAU,GAAG,gBAAM;SACtB,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,QAAQ,CAAC;SAClF,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC5B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,QAAgB,EAAE,cAAsB,EAAE,IAAY;IACnF,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9C,OAAO,IAAI,KAAK,cAAc,CAAC;AACjC,CAAC;AAED,oCAAoC;AAEpC;;GAEG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,MAAc,EAAE,YAAoB,QAAQ;IACjF,OAAO,gBAAM,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AAClF,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,IAAY,EAAE,SAAiB,EAAE,MAAc,EAAE,YAAoB,QAAQ;IACtG,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACnD,OAAO,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,uCAAuC;AAEvC,MAAM,aAAa,GAAG,aAAa,CAAC;AACpC,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB;;GAEG;AACH,SAAgB,UAAU,CAAC,SAAiB,EAAE,SAAiB;IAC7D,MAAM,GAAG,GAAG,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;IACnE,MAAM,EAAE,GAAG,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,gBAAM,CAAC,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpF,8BAA8B;IAC9B,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;AAChF,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,UAAkB,EAAE,SAAiB;IAC9D,MAAM,GAAG,GAAG,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;IACnE,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,gBAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAChF,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,gCAAgC;AAEhC;;GAEG;AACH,SAAgB,YAAY,CAAC,SAAiB,EAAE;IAC9C,OAAO,gBAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC7F,CAAC;AAED;;GAEG;AACH,SAAgB,IAAI;IAClB,OAAO,gBAAM,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 解析当前用户可见的仓库范围(数据权限收口函数)
|
|
3
|
+
* 所有"按仓库过滤"的业务查询必须通过本函数解析范围,禁止在业务层直接写 managerId 过滤。
|
|
4
|
+
*
|
|
5
|
+
* 当前实现(V4.0):admin 角色不限制(返回 null);门店店长(store_manager)按门店(storeId)
|
|
6
|
+
* 维度收口、不参与仓库维度收口(返回 null);其他用户仅返回其直接负责的仓库(managerId)。
|
|
7
|
+
*
|
|
8
|
+
* 注意:返回 null 表示不限;返回空数组 [] 会被调用方转成 in:[占位] 恒空(数据权限失效保护),
|
|
9
|
+
* 因此不负责任何仓库的门店角色必须在此豁免,否则其业务列表会被误判为空。
|
|
10
|
+
*
|
|
11
|
+
* 后期组织架构扩展点:引入部门挂载(warehouses.department_id)后,改为返回
|
|
12
|
+
* 「用户所属部门及其全部下级部门的仓库 ∪ 直接负责仓库」的并集,
|
|
13
|
+
* 仅需替换本函数内部实现,函数签名与所有调用方保持不变。
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveScopeWarehouseIds(userId: string, roles: string[]): Promise<string[] | null>;
|
|
16
|
+
/**
|
|
17
|
+
* 解析当前用户"负责的仓库"范围(库存查询/仓库 tabs 等按负责人收口的接口专用)
|
|
18
|
+
* 与 resolveScopeWarehouseIds 的区别:门店店长(store_manager)不返回 null 豁免,
|
|
19
|
+
* 而是收口到其负责门店关联的仓库(warehouse.storeId ∈ 负责门店),
|
|
20
|
+
* 确保门店/前置仓人员只能看到自己负责的仓库。
|
|
21
|
+
*
|
|
22
|
+
* 规则:
|
|
23
|
+
* - admin:不限(返回 null)
|
|
24
|
+
* - store_manager:仅其负责门店(store.contactPersonId = userId)关联的仓库(warehouse.storeId)
|
|
25
|
+
* - 其余角色(branch_warehouse_manager 前置仓、warehouse_manager 总仓等):仅直接负责的仓库(warehouse.managerId = userId)
|
|
26
|
+
*
|
|
27
|
+
* 返回 null 表示不限;返回 [] 表示无可见仓库(调用方转成 in:[] 恒空)。
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolveManagedWarehouseIds(userId: string, roles: string[]): Promise<string[] | null>;
|
|
30
|
+
/**
|
|
31
|
+
* 解析当前用户可见的门店范围(销售订单数据权限收口函数)
|
|
32
|
+
* 销售订单按门店(storeId)维度收口,规则:
|
|
33
|
+
* - store_manager(门店店长):仅可见其管理的门店(store.contactPersonId = userId)
|
|
34
|
+
* - branch_warehouse_manager(前置仓管理员):仅可见其负责的前置仓覆盖的门店
|
|
35
|
+
* (前置仓自身 storeId ∪ 其下级镇仓关联的 storeId)
|
|
36
|
+
* - 其余角色(admin 总部管理员、warehouse_manager 总仓管理员、purchaser 采购、finance_CFO 财务):不限(返回 null)
|
|
37
|
+
*
|
|
38
|
+
* 返回 null 表示不限;返回 [] 表示无可见门店(调用方转成 in:[] 恒空,符合"只能看自己管辖数据")。
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveScopeStoreIds(userId: string, roles: string[]): Promise<string[] | null>;
|
|
41
|
+
//# sourceMappingURL=dataScope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataScope.d.ts","sourceRoot":"","sources":["../../src/utils/dataScope.ts"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;GAaG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAYxG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAsC1G;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAwCpG"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveScopeWarehouseIds = resolveScopeWarehouseIds;
|
|
4
|
+
exports.resolveManagedWarehouseIds = resolveManagedWarehouseIds;
|
|
5
|
+
exports.resolveScopeStoreIds = resolveScopeStoreIds;
|
|
6
|
+
const database_1 = require("../config/database");
|
|
7
|
+
const db = database_1.prisma;
|
|
8
|
+
/**
|
|
9
|
+
* 解析当前用户可见的仓库范围(数据权限收口函数)
|
|
10
|
+
* 所有"按仓库过滤"的业务查询必须通过本函数解析范围,禁止在业务层直接写 managerId 过滤。
|
|
11
|
+
*
|
|
12
|
+
* 当前实现(V4.0):admin 角色不限制(返回 null);门店店长(store_manager)按门店(storeId)
|
|
13
|
+
* 维度收口、不参与仓库维度收口(返回 null);其他用户仅返回其直接负责的仓库(managerId)。
|
|
14
|
+
*
|
|
15
|
+
* 注意:返回 null 表示不限;返回空数组 [] 会被调用方转成 in:[占位] 恒空(数据权限失效保护),
|
|
16
|
+
* 因此不负责任何仓库的门店角色必须在此豁免,否则其业务列表会被误判为空。
|
|
17
|
+
*
|
|
18
|
+
* 后期组织架构扩展点:引入部门挂载(warehouses.department_id)后,改为返回
|
|
19
|
+
* 「用户所属部门及其全部下级部门的仓库 ∪ 直接负责仓库」的并集,
|
|
20
|
+
* 仅需替换本函数内部实现,函数签名与所有调用方保持不变。
|
|
21
|
+
*/
|
|
22
|
+
async function resolveScopeWarehouseIds(userId, roles) {
|
|
23
|
+
// admin 拥有全部仓库数据权限
|
|
24
|
+
if (roles.includes('admin'))
|
|
25
|
+
return null;
|
|
26
|
+
// 门店店长:数据权限按门店(storeId)收口,与仓库维度无关
|
|
27
|
+
if (roles.includes('store_manager'))
|
|
28
|
+
return null;
|
|
29
|
+
const warehouses = await db.warehouse.findMany({
|
|
30
|
+
where: { managerId: userId },
|
|
31
|
+
select: { id: true },
|
|
32
|
+
});
|
|
33
|
+
return warehouses.map((w) => w.id);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 解析当前用户"负责的仓库"范围(库存查询/仓库 tabs 等按负责人收口的接口专用)
|
|
37
|
+
* 与 resolveScopeWarehouseIds 的区别:门店店长(store_manager)不返回 null 豁免,
|
|
38
|
+
* 而是收口到其负责门店关联的仓库(warehouse.storeId ∈ 负责门店),
|
|
39
|
+
* 确保门店/前置仓人员只能看到自己负责的仓库。
|
|
40
|
+
*
|
|
41
|
+
* 规则:
|
|
42
|
+
* - admin:不限(返回 null)
|
|
43
|
+
* - store_manager:仅其负责门店(store.contactPersonId = userId)关联的仓库(warehouse.storeId)
|
|
44
|
+
* - 其余角色(branch_warehouse_manager 前置仓、warehouse_manager 总仓等):仅直接负责的仓库(warehouse.managerId = userId)
|
|
45
|
+
*
|
|
46
|
+
* 返回 null 表示不限;返回 [] 表示无可见仓库(调用方转成 in:[] 恒空)。
|
|
47
|
+
*/
|
|
48
|
+
async function resolveManagedWarehouseIds(userId, roles) {
|
|
49
|
+
// admin 拥有全部仓库数据权限
|
|
50
|
+
if (roles.includes('admin'))
|
|
51
|
+
return null;
|
|
52
|
+
// 门店店长:其负责的门店关联的仓库(兼容两种数据关联,取并集)
|
|
53
|
+
if (roles.includes('store_manager')) {
|
|
54
|
+
const ids = new Set();
|
|
55
|
+
// ① 店长直接负责的仓库(warehouse.managerId = userId,镇仓通常直接挂店长)
|
|
56
|
+
const managed = await db.warehouse.findMany({
|
|
57
|
+
where: { managerId: userId },
|
|
58
|
+
select: { id: true },
|
|
59
|
+
});
|
|
60
|
+
managed.forEach((w) => ids.add(w.id));
|
|
61
|
+
// ② 店长负责门店(store.contactPersonId = userId)关联的仓库(warehouse.storeId ∈ 负责门店)
|
|
62
|
+
const stores = await db.store.findMany({
|
|
63
|
+
where: { contactPersonId: userId },
|
|
64
|
+
select: { id: true },
|
|
65
|
+
});
|
|
66
|
+
if (stores.length > 0) {
|
|
67
|
+
const storeIds = stores.map((s) => s.id);
|
|
68
|
+
const warehouses = await db.warehouse.findMany({
|
|
69
|
+
where: { storeId: { in: storeIds } },
|
|
70
|
+
select: { id: true },
|
|
71
|
+
});
|
|
72
|
+
warehouses.forEach((w) => ids.add(w.id));
|
|
73
|
+
}
|
|
74
|
+
return Array.from(ids);
|
|
75
|
+
}
|
|
76
|
+
// 前置仓/总仓管理员:其直接负责的仓库
|
|
77
|
+
const warehouses = await db.warehouse.findMany({
|
|
78
|
+
where: { managerId: userId },
|
|
79
|
+
select: { id: true },
|
|
80
|
+
});
|
|
81
|
+
return warehouses.map((w) => w.id);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 解析当前用户可见的门店范围(销售订单数据权限收口函数)
|
|
85
|
+
* 销售订单按门店(storeId)维度收口,规则:
|
|
86
|
+
* - store_manager(门店店长):仅可见其管理的门店(store.contactPersonId = userId)
|
|
87
|
+
* - branch_warehouse_manager(前置仓管理员):仅可见其负责的前置仓覆盖的门店
|
|
88
|
+
* (前置仓自身 storeId ∪ 其下级镇仓关联的 storeId)
|
|
89
|
+
* - 其余角色(admin 总部管理员、warehouse_manager 总仓管理员、purchaser 采购、finance_CFO 财务):不限(返回 null)
|
|
90
|
+
*
|
|
91
|
+
* 返回 null 表示不限;返回 [] 表示无可见门店(调用方转成 in:[] 恒空,符合"只能看自己管辖数据")。
|
|
92
|
+
*/
|
|
93
|
+
async function resolveScopeStoreIds(userId, roles) {
|
|
94
|
+
const isStoreManager = roles.includes('store_manager');
|
|
95
|
+
const isBranchManager = roles.includes('branch_warehouse_manager');
|
|
96
|
+
if (!isStoreManager && !isBranchManager)
|
|
97
|
+
return null;
|
|
98
|
+
const storeIds = new Set();
|
|
99
|
+
// 门店店长:可见其管理的门店(兼容两种数据关联,取并集:
|
|
100
|
+
// ① store.contactPersonId = userId;② 店长负责的镇仓 warehouse.managerId = userId 关联的门店)
|
|
101
|
+
if (isStoreManager) {
|
|
102
|
+
const stores = await db.store.findMany({
|
|
103
|
+
where: { contactPersonId: userId },
|
|
104
|
+
select: { id: true },
|
|
105
|
+
});
|
|
106
|
+
stores.forEach((s) => storeIds.add(s.id));
|
|
107
|
+
const towns = await db.warehouse.findMany({
|
|
108
|
+
where: { managerId: userId },
|
|
109
|
+
select: { storeId: true },
|
|
110
|
+
});
|
|
111
|
+
towns.forEach((t) => t.storeId && storeIds.add(t.storeId));
|
|
112
|
+
}
|
|
113
|
+
// 前置仓管理员:负责的前置仓及其下级镇仓关联的门店
|
|
114
|
+
if (isBranchManager) {
|
|
115
|
+
const branches = await db.warehouse.findMany({
|
|
116
|
+
where: { level: 'preposition', managerId: userId },
|
|
117
|
+
select: { id: true, storeId: true },
|
|
118
|
+
});
|
|
119
|
+
if (branches.length > 0) {
|
|
120
|
+
branches.forEach((b) => b.storeId && storeIds.add(b.storeId));
|
|
121
|
+
const towns = await db.warehouse.findMany({
|
|
122
|
+
where: { parentWarehouseId: { in: branches.map((b) => b.id) }, level: 'town' },
|
|
123
|
+
select: { storeId: true },
|
|
124
|
+
});
|
|
125
|
+
towns.forEach((t) => t.storeId && storeIds.add(t.storeId));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return Array.from(storeIds);
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=dataScope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataScope.js","sourceRoot":"","sources":["../../src/utils/dataScope.ts"],"names":[],"mappings":"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"}
|