shared-ritm 1.2.67 → 1.2.69
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 +103 -103
- package/dist/index.css +1 -1
- package/dist/shared-ritm.es.js +27939 -8483
- package/dist/shared-ritm.umd.js +3834 -7
- package/dist/types/api/services/PhotoService.d.ts +40 -0
- package/dist/types/api/services/UserService.d.ts +11 -0
- package/dist/types/api/types/Api_Instruments.d.ts +1 -35
- package/dist/types/api/types/Api_User.d.ts +42 -0
- package/dist/types/index.d.ts +5 -1
- package/dist/types/utils/helpers.d.ts +1 -0
- package/package.json +64 -63
- package/src/api/services/PhotoService.ts +137 -0
- package/src/api/services/UserService.ts +19 -0
- package/src/api/types/Api_Controls.ts +72 -72
- package/src/api/types/Api_Files.ts +1 -1
- package/src/api/types/Api_Instruments.ts +98 -133
- package/src/api/types/Api_Projects.ts +55 -55
- package/src/api/types/Api_Repairs.ts +93 -93
- package/src/api/types/Api_Tasks.ts +155 -155
- package/src/api/types/Api_User.ts +44 -0
- package/src/common/app-checkbox/AppCheckbox.vue +26 -26
- package/src/common/app-dialogs/AppConfirmDialog.vue +99 -99
- package/src/common/app-dropdown/AppDropdown.vue +31 -31
- package/src/common/app-input/AppInput.vue +148 -148
- package/src/common/app-select/AppSelect.vue +157 -157
- package/src/common/app-sheet/AppSheet.vue +120 -120
- package/src/common/app-sidebar/components/SidebarMenuItem.vue +148 -148
- package/src/common/app-table/AppTable.vue +250 -250
- package/src/common/app-table/AppTableLayout.vue +111 -111
- package/src/common/app-table/components/ModalSelect.vue +264 -264
- package/src/common/app-table/components/TableModal.vue +329 -329
- package/src/common/app-table/components/TablePagination.vue +152 -152
- package/src/common/app-table/components/TableSearch.vue +76 -76
- package/src/common/app-table/controllers/useBaseTable.ts +42 -42
- package/src/common/app-table/controllers/useColumnSelector.ts +38 -38
- package/src/common/app-table/controllers/useTableModel.ts +93 -93
- package/src/common/app-toggle/AppToggle.vue +23 -23
- package/src/common/app-wrapper/AppWrapper.vue +28 -28
- package/src/icons/components/table-filter-icon.vue +30 -30
- package/src/icons/dialogs/RemoveIcon.vue +12 -12
- package/src/icons/dialogs/SafetyIcon.vue +12 -12
- package/src/icons/task/attention-icon.vue +13 -13
- package/src/icons/task/clock-icon.vue +10 -10
- package/src/icons/task/delete-icon.vue +10 -10
- package/src/icons/task/fire-icon.vue +16 -16
- package/src/index.ts +6 -0
- package/src/main.ts +28 -28
- package/src/shared/styles/general.css +125 -125
- package/src/styles/variables.sass +12 -12
- package/src/utils/confirm.ts +12 -12
- package/src/utils/helpers.ts +58 -39
- package/src/utils/notification.ts +9 -9
- package/dist/types/api/types/Api_Users.d.ts +0 -43
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as faceapi from 'face-api.js';
|
|
2
|
+
declare class PhotoService {
|
|
3
|
+
getVideoStreamConfig(width: number, height: number): {
|
|
4
|
+
audio: boolean;
|
|
5
|
+
video: {
|
|
6
|
+
width: {
|
|
7
|
+
min: number;
|
|
8
|
+
ideal: number;
|
|
9
|
+
};
|
|
10
|
+
height: {
|
|
11
|
+
min: number;
|
|
12
|
+
ideal: number;
|
|
13
|
+
};
|
|
14
|
+
facingMode: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
getContourCoordinate(width: number, height: number): {
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
width: number;
|
|
21
|
+
height: number;
|
|
22
|
+
};
|
|
23
|
+
getBoxData(box: any): {
|
|
24
|
+
x: any;
|
|
25
|
+
y: any;
|
|
26
|
+
width: any;
|
|
27
|
+
height: any;
|
|
28
|
+
} | null;
|
|
29
|
+
setStylesForCanvas(canvasContainer: any): void;
|
|
30
|
+
checkFaceInclusion(frame: any, face: any): boolean;
|
|
31
|
+
getFaceDetections(videoRef: any): Promise<faceapi.WithFaceExpressions<faceapi.WithFaceLandmarks<{
|
|
32
|
+
detection: faceapi.FaceDetection;
|
|
33
|
+
}, faceapi.FaceLandmarks68>>[]>;
|
|
34
|
+
getCanvas(videoRef: any): HTMLCanvasElement;
|
|
35
|
+
getResizedAndDetection(canvas: any, detections: any, ctx: any, videoWidth: number, videoHeight: number): void;
|
|
36
|
+
getFaceSnapshot(inputImage: any, box: any): Promise<string | null>;
|
|
37
|
+
initModels(): Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
export default function usePhotoService(): PhotoService;
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import ApiService from '@/api/settings/ApiService';
|
|
2
|
+
import { Api_User } from '@/api/types/Api_User';
|
|
3
|
+
declare class UserService extends ApiService {
|
|
4
|
+
editUser({ id, model }: {
|
|
5
|
+
id: string;
|
|
6
|
+
model: any;
|
|
7
|
+
}): Promise<Api_User>;
|
|
8
|
+
getUser(id: string): Promise<Api_User>;
|
|
9
|
+
}
|
|
10
|
+
export default function useUserService(): UserService;
|
|
11
|
+
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Api_User } from '@/api/types/Api_User';
|
|
1
2
|
export type Api_Instrument_Storage = {
|
|
2
3
|
id: string;
|
|
3
4
|
created_at: string;
|
|
@@ -30,18 +31,6 @@ export type Api_Instrument_Location = {
|
|
|
30
31
|
deleted_at: string | null;
|
|
31
32
|
state_id: unknown | null;
|
|
32
33
|
};
|
|
33
|
-
export type Api_User_Team = {
|
|
34
|
-
id: string;
|
|
35
|
-
name: string;
|
|
36
|
-
display_name: string;
|
|
37
|
-
description: string;
|
|
38
|
-
created_at: string;
|
|
39
|
-
updated_at: string;
|
|
40
|
-
pivot: {
|
|
41
|
-
team_id: string;
|
|
42
|
-
user_id: string;
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
34
|
export type Api_Instrument_Status = {
|
|
46
35
|
id: string;
|
|
47
36
|
description: string;
|
|
@@ -51,29 +40,6 @@ export type Api_Instrument_Status = {
|
|
|
51
40
|
updated_at: string;
|
|
52
41
|
deleted_at: string | null;
|
|
53
42
|
};
|
|
54
|
-
export type Api_User = {
|
|
55
|
-
id: string;
|
|
56
|
-
RFID: string;
|
|
57
|
-
avatar: unknown | null;
|
|
58
|
-
avatar_id: string | null;
|
|
59
|
-
change_password: string;
|
|
60
|
-
created_at: string;
|
|
61
|
-
updated_at: string;
|
|
62
|
-
deleted_at: string | null;
|
|
63
|
-
dismissal_at: string | null;
|
|
64
|
-
email_verified_at: string;
|
|
65
|
-
divisions: string;
|
|
66
|
-
email: string;
|
|
67
|
-
face_recognition_id: string | null;
|
|
68
|
-
first_name: string;
|
|
69
|
-
full_name: string;
|
|
70
|
-
last_name: string;
|
|
71
|
-
patronymic: string;
|
|
72
|
-
personnel_number: number;
|
|
73
|
-
phone: string;
|
|
74
|
-
profession: string;
|
|
75
|
-
teams: Api_User_Team[];
|
|
76
|
-
};
|
|
77
43
|
export type Api_Instrument = {
|
|
78
44
|
id: string;
|
|
79
45
|
RFID: string | null;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type Api_User_Team = {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
display_name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
created_at: string;
|
|
7
|
+
updated_at: string;
|
|
8
|
+
pivot: {
|
|
9
|
+
team_id: string;
|
|
10
|
+
user_id: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export type Api_User_Photo = {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
path: string;
|
|
17
|
+
type: string;
|
|
18
|
+
};
|
|
19
|
+
export type Api_User = {
|
|
20
|
+
id: string;
|
|
21
|
+
RFID: string;
|
|
22
|
+
avatar: unknown | null;
|
|
23
|
+
avatar_id: string | null;
|
|
24
|
+
change_password: string;
|
|
25
|
+
created_at: string;
|
|
26
|
+
updated_at: string;
|
|
27
|
+
deleted_at: string | null;
|
|
28
|
+
dismissal_at: string | null;
|
|
29
|
+
email_verified_at: string;
|
|
30
|
+
divisions: string;
|
|
31
|
+
email: string;
|
|
32
|
+
face_recognition_id: string | null;
|
|
33
|
+
first_name: string;
|
|
34
|
+
full_name: string;
|
|
35
|
+
last_name: string;
|
|
36
|
+
patronymic: string;
|
|
37
|
+
personnel_number: number;
|
|
38
|
+
phone: string;
|
|
39
|
+
profession: string;
|
|
40
|
+
teams: Api_User_Team[];
|
|
41
|
+
photos: Api_User_Photo[];
|
|
42
|
+
};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -30,17 +30,20 @@ import useTasksService from '@/api/services/TasksService';
|
|
|
30
30
|
import useAuthService from '@/api/services/AuthService';
|
|
31
31
|
import useFileService from '@/api/services/FileService';
|
|
32
32
|
import useVideoService from '@/api/services/VideoService';
|
|
33
|
+
import useUserService from '@/api/services/UserService';
|
|
34
|
+
import usePhotoService from '@/api/services/PhotoService';
|
|
33
35
|
import useInstrumentsService from '@/api/services/InstrumentsService';
|
|
34
36
|
import useControlsService from '@/api/services/ControlsService';
|
|
35
37
|
import useSearchService from '@/api/services/SearchService';
|
|
36
38
|
export { AppButton, AppCheckbox, AppDatePicker, AppInput, AppInputSearch, AppLayout, AppLayoutHeader, AppLayoutPage, AppLoader, AppSelect, AppSheet, AppSidebar, AppToggle, AppWrapper, AppConfirmDialog, AppDropdown, AppTablePagination, AppTableSearch, AppTableModal, AppTable, AppTableLayout, AppModalSelect, };
|
|
37
|
-
export { ApiService, useAuthService, useGanttService, useMetricsService, useProjectsService, useRepairsService, useTasksService, useFileService, useControlsService, useVideoService, useInstrumentsService, useSearchService, };
|
|
39
|
+
export { ApiService, useAuthService, useGanttService, useMetricsService, useProjectsService, useRepairsService, useTasksService, useFileService, useControlsService, useVideoService, useUserService, usePhotoService, useInstrumentsService, useSearchService, };
|
|
38
40
|
export { useBaseTable } from './common/app-table/controllers/useBaseTable';
|
|
39
41
|
export { useTableModel } from './common/app-table/controllers/useTableModel';
|
|
40
42
|
export { useColumnSelector } from './common/app-table/controllers/useColumnSelector';
|
|
41
43
|
export type { FilterOption, TableModel, TableColumn } from './common/app-table/controllers/useTableModel';
|
|
42
44
|
export type { NotificationType } from './utils/notification';
|
|
43
45
|
export { notificationSettings } from './utils/notification';
|
|
46
|
+
export * from './utils/helpers';
|
|
44
47
|
export * from './api/types/Api_Service';
|
|
45
48
|
export * from './api/types/Api_Tasks';
|
|
46
49
|
export * from './api/types/Api_Repairs';
|
|
@@ -48,3 +51,4 @@ export * from './api/types/Api_Projects';
|
|
|
48
51
|
export * from './api/types/Api_Controls';
|
|
49
52
|
export * from './api/types/Api_Instruments';
|
|
50
53
|
export * from './api/types/Api_Search';
|
|
54
|
+
export * from './api/types/Api_User';
|
package/package.json
CHANGED
|
@@ -1,63 +1,64 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "shared-ritm",
|
|
3
|
-
"version": "1.2.
|
|
4
|
-
"private": false,
|
|
5
|
-
"files": [
|
|
6
|
-
"dist",
|
|
7
|
-
"src"
|
|
8
|
-
],
|
|
9
|
-
"main": "dist/shared-ritm.umd.js",
|
|
10
|
-
"type": "module",
|
|
11
|
-
"module": "./dist/shared-ritm.es.js",
|
|
12
|
-
"types": "./dist/types/index.d.ts",
|
|
13
|
-
"exports": {
|
|
14
|
-
".": {
|
|
15
|
-
"import": "./dist/shared-ritm.es.js",
|
|
16
|
-
"require": "./dist/shared-ritm.umd.js",
|
|
17
|
-
"default": "./dist/shared-ritm.es.js",
|
|
18
|
-
"types": "./dist/types/index.d.ts"
|
|
19
|
-
},
|
|
20
|
-
"./style": "./dist/index.css"
|
|
21
|
-
},
|
|
22
|
-
"scripts": {
|
|
23
|
-
"dev": "vite",
|
|
24
|
-
"build": "vite build && tsc --emitDeclarationOnly",
|
|
25
|
-
"typecheck": "vue-tsc --noEmit",
|
|
26
|
-
"lint": "eslint --fix",
|
|
27
|
-
"format": "prettier -w -u ."
|
|
28
|
-
},
|
|
29
|
-
"dependencies": {
|
|
30
|
-
"@quasar/extras": "^1.16.17",
|
|
31
|
-
"@vueuse/core": "^10.1.2",
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"vue
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"@
|
|
42
|
-
"@
|
|
43
|
-
"@
|
|
44
|
-
"@typescript-eslint/
|
|
45
|
-
"@
|
|
46
|
-
"@
|
|
47
|
-
"@vue/
|
|
48
|
-
"@vue/eslint-config-
|
|
49
|
-
"eslint": "^7.
|
|
50
|
-
"eslint
|
|
51
|
-
"eslint-plugin-
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"vite
|
|
61
|
-
"
|
|
62
|
-
|
|
63
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "shared-ritm",
|
|
3
|
+
"version": "1.2.69",
|
|
4
|
+
"private": false,
|
|
5
|
+
"files": [
|
|
6
|
+
"dist",
|
|
7
|
+
"src"
|
|
8
|
+
],
|
|
9
|
+
"main": "dist/shared-ritm.umd.js",
|
|
10
|
+
"type": "module",
|
|
11
|
+
"module": "./dist/shared-ritm.es.js",
|
|
12
|
+
"types": "./dist/types/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"import": "./dist/shared-ritm.es.js",
|
|
16
|
+
"require": "./dist/shared-ritm.umd.js",
|
|
17
|
+
"default": "./dist/shared-ritm.es.js",
|
|
18
|
+
"types": "./dist/types/index.d.ts"
|
|
19
|
+
},
|
|
20
|
+
"./style": "./dist/index.css"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"dev": "vite",
|
|
24
|
+
"build": "vite build && tsc --emitDeclarationOnly",
|
|
25
|
+
"typecheck": "vue-tsc --noEmit",
|
|
26
|
+
"lint": "eslint --fix",
|
|
27
|
+
"format": "prettier -w -u ."
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@quasar/extras": "^1.16.17",
|
|
31
|
+
"@vueuse/core": "^10.1.2",
|
|
32
|
+
"face-api.js": "^0.22.2",
|
|
33
|
+
"axios": "^1.7.7",
|
|
34
|
+
"vue": "^3.5.12",
|
|
35
|
+
"vue-router": "^4.0.3"
|
|
36
|
+
},
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"quasar": "^2.18.1"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@quasar/vite-plugin": "^1.9.0",
|
|
42
|
+
"@rollup/pluginutils": "^5.1.3",
|
|
43
|
+
"@types/node": "^22.7.9",
|
|
44
|
+
"@typescript-eslint/eslint-plugin": "^4.25.0",
|
|
45
|
+
"@typescript-eslint/parser": "^4.25.0",
|
|
46
|
+
"@vitejs/plugin-vue": "^5.1.4",
|
|
47
|
+
"@vue/compiler-sfc": "^3.0.5",
|
|
48
|
+
"@vue/eslint-config-prettier": "^6.0.0",
|
|
49
|
+
"@vue/eslint-config-typescript": "^7.0.0",
|
|
50
|
+
"eslint": "^7.27.0",
|
|
51
|
+
"eslint-plugin-prettier": "^3.4.0",
|
|
52
|
+
"eslint-plugin-vue": "^7.10.0",
|
|
53
|
+
"install": "^0.13.0",
|
|
54
|
+
"npm": "^11.4.0",
|
|
55
|
+
"prettier": "^2.3.0",
|
|
56
|
+
"quasar": "^2.18.1",
|
|
57
|
+
"rollup-plugin-visualizer": "^5.14.0",
|
|
58
|
+
"sass": "^1.80.4",
|
|
59
|
+
"typescript": "^5.6.3",
|
|
60
|
+
"vite": "^5.4.9",
|
|
61
|
+
"vite-plugin-css-modules": "^0.0.1",
|
|
62
|
+
"vue-tsc": "^2.1.6"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import * as faceapi from 'face-api.js'
|
|
2
|
+
|
|
3
|
+
class PhotoService {
|
|
4
|
+
// async getFaceSnapshot(inputImage: any, box: any) {
|
|
5
|
+
// const regionsToExtract = [new faceapi.Rect(box.x, box.y, box.width, box.height)]
|
|
6
|
+
// const faceImages = await faceapi.extractFaces(inputImage, regionsToExtract)
|
|
7
|
+
// if (faceImages.length) {
|
|
8
|
+
// const dataUrl = faceImages[0].toDataURL('image/jpeg')
|
|
9
|
+
// photo.value = dataUrl.replace(/^data:image\/\w+;base64,/, '')
|
|
10
|
+
// }
|
|
11
|
+
// }
|
|
12
|
+
|
|
13
|
+
// Метод настройки конфига для стрима
|
|
14
|
+
getVideoStreamConfig(width: number, height: number) {
|
|
15
|
+
return {
|
|
16
|
+
audio: false,
|
|
17
|
+
video: {
|
|
18
|
+
width: { min: width, ideal: width },
|
|
19
|
+
height: { min: height, ideal: height },
|
|
20
|
+
facingMode: 'environment', // или 'user' для фронтальной камеры
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Метод для настройки рамки, где должно помещаться лицо
|
|
26
|
+
getContourCoordinate(width: number, height: number) {
|
|
27
|
+
return {
|
|
28
|
+
x: width * 0.25,
|
|
29
|
+
y: height * 0.05,
|
|
30
|
+
width: width * 0.5,
|
|
31
|
+
height: height * 0.9,
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
getBoxData(box: any) {
|
|
36
|
+
if (!box) return null
|
|
37
|
+
return {
|
|
38
|
+
x: box.x,
|
|
39
|
+
y: box.y,
|
|
40
|
+
width: box.width,
|
|
41
|
+
height: box.height,
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
setStylesForCanvas(canvasContainer: any) {
|
|
46
|
+
canvasContainer.width = '100%'
|
|
47
|
+
canvasContainer.height = '100%'
|
|
48
|
+
canvasContainer.style.position = 'absolute'
|
|
49
|
+
canvasContainer.style.top = '0'
|
|
50
|
+
canvasContainer.style.left = '0'
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Метод для рассчёта того, что лицо полностью помещается в рамке
|
|
54
|
+
checkFaceInclusion(frame: any, face: any) {
|
|
55
|
+
if (!frame || !face) return false
|
|
56
|
+
|
|
57
|
+
if (face.width > frame.width || face.height > frame.height) {
|
|
58
|
+
return false
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const faceXmin = face.x
|
|
62
|
+
const faceXmax = face.x + face.width
|
|
63
|
+
const faceYmin = face.y
|
|
64
|
+
const faceYmax = face.y + face.height
|
|
65
|
+
|
|
66
|
+
const frameXmin = frame.x
|
|
67
|
+
const frameXmax = frame.x + frame.width
|
|
68
|
+
const frameYmin = frame.y
|
|
69
|
+
const frameYmax = frame.y + frame.height
|
|
70
|
+
|
|
71
|
+
return faceXmin >= frameXmin && faceXmax <= frameXmax && faceYmin >= frameYmin && faceYmax <= frameYmax
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async getFaceDetections(videoRef: any) {
|
|
75
|
+
if (!videoRef) return []
|
|
76
|
+
return faceapi
|
|
77
|
+
.detectAllFaces(videoRef, new faceapi.TinyFaceDetectorOptions())
|
|
78
|
+
.withFaceLandmarks()
|
|
79
|
+
.withFaceExpressions()
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
getCanvas(videoRef: any) {
|
|
83
|
+
return faceapi.createCanvasFromMedia(videoRef)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
getResizedAndDetection(canvas: any, detections: any, ctx: any, videoWidth: number, videoHeight: number) {
|
|
87
|
+
faceapi.matchDimensions(canvas, { width: videoWidth, height: videoHeight })
|
|
88
|
+
|
|
89
|
+
const resized = faceapi.resizeResults(detections, {
|
|
90
|
+
width: videoWidth,
|
|
91
|
+
height: videoHeight,
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
ctx.clearRect(0, 0, videoWidth, videoHeight)
|
|
95
|
+
|
|
96
|
+
faceapi.draw.drawDetections(canvas, resized)
|
|
97
|
+
faceapi.draw.drawFaceLandmarks(canvas, resized)
|
|
98
|
+
faceapi.draw.drawFaceExpressions(canvas, resized)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
async getFaceSnapshot(inputImage: any, box: any) {
|
|
102
|
+
const regionsToExtract = [new faceapi.Rect(box.x, box.y, box.width, box.height)]
|
|
103
|
+
const faceImages = await faceapi.extractFaces(inputImage, regionsToExtract)
|
|
104
|
+
|
|
105
|
+
if (faceImages.length) {
|
|
106
|
+
const dataUrl = faceImages[0].toDataURL('image/jpeg')
|
|
107
|
+
return dataUrl.replace(/^data:image\/\w+;base64,/, '')
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return null
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
async initModels() {
|
|
114
|
+
let date = new Date()
|
|
115
|
+
console.log(date)
|
|
116
|
+
try {
|
|
117
|
+
await Promise.all([
|
|
118
|
+
faceapi.nets.tinyFaceDetector.loadFromUri('/models'),
|
|
119
|
+
faceapi.nets.faceLandmark68Net.loadFromUri('/models'),
|
|
120
|
+
faceapi.nets.faceRecognitionNet.loadFromUri('/models'),
|
|
121
|
+
faceapi.nets.faceExpressionNet.loadFromUri('/models'),
|
|
122
|
+
//faceapi.nets.ssdMobilenetv1.loadFromUri('/models'),
|
|
123
|
+
])
|
|
124
|
+
} catch (error) {
|
|
125
|
+
console.error(error)
|
|
126
|
+
}
|
|
127
|
+
date = new Date()
|
|
128
|
+
console.log(date)
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
let api: PhotoService
|
|
133
|
+
|
|
134
|
+
export default function usePhotoService() {
|
|
135
|
+
if (!api) api = new PhotoService()
|
|
136
|
+
return api
|
|
137
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import ApiService from '@/api/settings/ApiService'
|
|
2
|
+
import { Api_User } from '@/api/types/Api_User'
|
|
3
|
+
|
|
4
|
+
class UserService extends ApiService {
|
|
5
|
+
public async editUser({ id, model }: { id: string; model: any }): Promise<Api_User> {
|
|
6
|
+
return await this.put<Partial<Api_User>, Api_User>(`/admin/users/${id}`, model)
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
public async getUser(id: string): Promise<Api_User> {
|
|
10
|
+
return await this.get<Api_User>(`/admin/users/${id}`)
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
let api: UserService
|
|
15
|
+
|
|
16
|
+
export default function useUserService() {
|
|
17
|
+
if (!api) api = new UserService()
|
|
18
|
+
return api
|
|
19
|
+
}
|
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
export type Api_User_Dto = {
|
|
2
|
-
id: string
|
|
3
|
-
full_name: string
|
|
4
|
-
}
|
|
5
|
-
export type Api_ControlZones_Dto = {
|
|
6
|
-
id: string
|
|
7
|
-
name: string
|
|
8
|
-
inventory_number: string
|
|
9
|
-
uuid: string
|
|
10
|
-
controller_zone: string
|
|
11
|
-
users?: Api_User_Dto[]
|
|
12
|
-
}
|
|
13
|
-
export type ControlsParams = {
|
|
14
|
-
search?: string
|
|
15
|
-
page?: number
|
|
16
|
-
filter?: Record<string, string[]>
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface ControlMeta {
|
|
20
|
-
total: number
|
|
21
|
-
perPage: number
|
|
22
|
-
totalPages: number
|
|
23
|
-
currentPage: number
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export type FiltersValue = {
|
|
27
|
-
users?: {
|
|
28
|
-
users: Api_User_Dto[]
|
|
29
|
-
}
|
|
30
|
-
controller?: {
|
|
31
|
-
controller: Api_User_Dto[]
|
|
32
|
-
}
|
|
33
|
-
responsible?: {
|
|
34
|
-
responsible: Api_User_Dto[]
|
|
35
|
-
}
|
|
36
|
-
status?: {
|
|
37
|
-
status: boolean
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
export type Api_Instrument_Dto = {
|
|
41
|
-
id: string
|
|
42
|
-
name: string
|
|
43
|
-
storage_id?: string
|
|
44
|
-
}
|
|
45
|
-
export type Api_Warehouse_Dto = {
|
|
46
|
-
id: string
|
|
47
|
-
invoice_ref_key: string
|
|
48
|
-
inventory_number: string
|
|
49
|
-
instrument: Api_Instrument_Dto[]
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export type Api_ControlLogs_Dto = {
|
|
53
|
-
id: string
|
|
54
|
-
automatically: string
|
|
55
|
-
in_zone: string
|
|
56
|
-
uuid: string
|
|
57
|
-
controller_zone: string
|
|
58
|
-
controller: Api_User_Dto[]
|
|
59
|
-
user: Api_User_Dto[]
|
|
60
|
-
frame: Api_ControlZones_Dto[]
|
|
61
|
-
warehouse: Api_Warehouse_Dto[]
|
|
62
|
-
}
|
|
63
|
-
export type Api_New_Items = {
|
|
64
|
-
title: string
|
|
65
|
-
inventory_numbers: string
|
|
66
|
-
storage_id: string
|
|
67
|
-
}
|
|
68
|
-
export type Api_ManualEntry_Dto = {
|
|
69
|
-
user: string
|
|
70
|
-
items?: string[]
|
|
71
|
-
new_items?: Api_New_Items[]
|
|
72
|
-
}
|
|
1
|
+
export type Api_User_Dto = {
|
|
2
|
+
id: string
|
|
3
|
+
full_name: string
|
|
4
|
+
}
|
|
5
|
+
export type Api_ControlZones_Dto = {
|
|
6
|
+
id: string
|
|
7
|
+
name: string
|
|
8
|
+
inventory_number: string
|
|
9
|
+
uuid: string
|
|
10
|
+
controller_zone: string
|
|
11
|
+
users?: Api_User_Dto[]
|
|
12
|
+
}
|
|
13
|
+
export type ControlsParams = {
|
|
14
|
+
search?: string
|
|
15
|
+
page?: number
|
|
16
|
+
filter?: Record<string, string[]>
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface ControlMeta {
|
|
20
|
+
total: number
|
|
21
|
+
perPage: number
|
|
22
|
+
totalPages: number
|
|
23
|
+
currentPage: number
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type FiltersValue = {
|
|
27
|
+
users?: {
|
|
28
|
+
users: Api_User_Dto[]
|
|
29
|
+
}
|
|
30
|
+
controller?: {
|
|
31
|
+
controller: Api_User_Dto[]
|
|
32
|
+
}
|
|
33
|
+
responsible?: {
|
|
34
|
+
responsible: Api_User_Dto[]
|
|
35
|
+
}
|
|
36
|
+
status?: {
|
|
37
|
+
status: boolean
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export type Api_Instrument_Dto = {
|
|
41
|
+
id: string
|
|
42
|
+
name: string
|
|
43
|
+
storage_id?: string
|
|
44
|
+
}
|
|
45
|
+
export type Api_Warehouse_Dto = {
|
|
46
|
+
id: string
|
|
47
|
+
invoice_ref_key: string
|
|
48
|
+
inventory_number: string
|
|
49
|
+
instrument: Api_Instrument_Dto[]
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export type Api_ControlLogs_Dto = {
|
|
53
|
+
id: string
|
|
54
|
+
automatically: string
|
|
55
|
+
in_zone: string
|
|
56
|
+
uuid: string
|
|
57
|
+
controller_zone: string
|
|
58
|
+
controller: Api_User_Dto[]
|
|
59
|
+
user: Api_User_Dto[]
|
|
60
|
+
frame: Api_ControlZones_Dto[]
|
|
61
|
+
warehouse: Api_Warehouse_Dto[]
|
|
62
|
+
}
|
|
63
|
+
export type Api_New_Items = {
|
|
64
|
+
title: string
|
|
65
|
+
inventory_numbers: string
|
|
66
|
+
storage_id: string
|
|
67
|
+
}
|
|
68
|
+
export type Api_ManualEntry_Dto = {
|
|
69
|
+
user: string
|
|
70
|
+
items?: string[]
|
|
71
|
+
new_items?: Api_New_Items[]
|
|
72
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export type Api_Files_Responsible_Dto = unknown
|
|
1
|
+
export type Api_Files_Responsible_Dto = unknown
|