shared-ritm 1.2.106 → 1.2.108

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/index.css +1 -1
  2. package/dist/shared-ritm.es.js +41 -10
  3. package/dist/shared-ritm.umd.js +41 -41
  4. package/dist/types/api/services/InstrumentsService.d.ts +17 -1
  5. package/dist/types/api/services/PhotoService.d.ts +38 -51
  6. package/dist/types/api/services/SearchService.d.ts +2 -1
  7. package/dist/types/api/types/Api_Instruments.d.ts +26 -0
  8. package/dist/types/api/types/Api_Search.d.ts +16 -0
  9. package/package.json +64 -64
  10. package/src/api/services/BrigadesService.ts +32 -32
  11. package/src/api/services/EquipmentService.ts +29 -29
  12. package/src/api/services/InstrumentsService.ts +63 -22
  13. package/src/api/services/SearchService.ts +5 -2
  14. package/src/api/services/UserService.ts +101 -101
  15. package/src/api/services/VideoService.ts +62 -62
  16. package/src/api/settings/ApiService.ts +124 -126
  17. package/src/api/types/Api_Brigades.ts +36 -36
  18. package/src/api/types/Api_Equipment.ts +3 -3
  19. package/src/api/types/Api_Instruments.ts +136 -98
  20. package/src/api/types/Api_Search.ts +19 -0
  21. package/src/api/types/Api_User.ts +117 -117
  22. package/src/api/types/Api_Video.ts +123 -123
  23. package/src/common/app-input-new/AppInputNew.vue +167 -167
  24. package/src/common/app-layout/components/AppLayoutHeader.vue +250 -250
  25. package/src/common/app-sheet-new/AppSheetNew.vue +246 -246
  26. package/src/common/app-table/AppTable.vue +314 -312
  27. package/src/common/app-table/AppTableLayout.vue +137 -137
  28. package/src/common/app-table/components/ModalSelect.vue +270 -270
  29. package/src/common/app-table/components/TableModal.vue +356 -356
  30. package/src/common/app-table/controllers/useBaseTable.ts +45 -45
  31. package/src/index.ts +119 -119
  32. package/src/styles/variables.sass +12 -12
  33. package/dist/types/api/services/ComentsServise.d.ts +0 -10
  34. package/dist/types/api/types/Api_Users.d.ts +0 -43
@@ -1,123 +1,123 @@
1
- import { Api_Status_DTO } from '@/api/types/Api_Tasks'
2
-
3
- export type Api_Video_Source = {
4
- id: string
5
- name: string
6
- login: string
7
- password: string
8
- camera_id: string | null
9
- comment: string | null
10
- data: unknown | null
11
- snapshot_path: string | null
12
- url: string
13
- updated_at: string
14
- created_at: string
15
- fps: string
16
- domed: boolean
17
- height: number
18
- width: number
19
- }
20
-
21
- export type Api_Work_Zone_Search = {
22
- id: string
23
- name: string
24
- title: string
25
- type: number
26
- parent_id: string | null
27
- created_at: string
28
- deleted_at: string | null
29
- updated_at: string
30
- description: string
31
- detect_face: boolean
32
- detect_helmet: boolean
33
- detect_mask: boolean
34
- detect_work_time: boolean
35
- detect_work_zone: boolean
36
- has_tasks: boolean
37
- is_parent: boolean
38
- x0: number
39
- x1: number
40
- y0: number
41
- y1: number
42
- video_source: Api_Video_Source
43
- video_source_id: string
44
- warehouse_by_work_zone_instruments: unknown[]
45
- }
46
-
47
- export type Api_Work_Zone_Usage_User = {
48
- id: string
49
- user_id: string
50
- user_full_name: string
51
- work_zone_id: string
52
- start_interval: string
53
- end_interval: string
54
- minutes: number
55
- }
56
-
57
- export type Api_Work_Zone_Task = {
58
- id: string
59
- name: string
60
- plan_date: string
61
- planned_start: null | string
62
- planned_end: null | string
63
- deadline: string
64
- is_critical_path: boolean | null
65
- is_expired: boolean
66
- power_output_MWh: number
67
- cost_per_MWh: number | null
68
- fact_start_date: null | string
69
- fact_end_date: null | string
70
- time_to_complete_sec: number | null
71
- status: Api_Status_DTO[]
72
- usage_users: Api_Work_Zone_Usage_User[]
73
- }
74
-
75
- export type Api_Work_Zone_Coords = {
76
- x0: number
77
- x1: number
78
- y0: number
79
- y1: number
80
- }
81
-
82
- export type Api_Work_Zone = {
83
- id: string
84
- title: string
85
- created_at: string
86
- video_source: { id: string; name: string }
87
- coordinates: Api_Work_Zone_Coords
88
- warehouse_by_work_zone_instruments: unknown[]
89
- tasks: Api_Work_Zone_Task[]
90
- }
91
-
92
- export type Api_Video_Source_Search = {
93
- comment: string
94
- domed: boolean
95
- fps: string
96
- height: number
97
- id: string
98
- interactive_zones: unknown
99
- login: string
100
- name: string
101
- password: string
102
- related_video_sources: unknown[]
103
- shapes: unknown[]
104
- snapshot_path: string
105
- url: string
106
- video_source: Api_Video_Source_Search[]
107
- width: number
108
- work_zones: unknown[]
109
- }
110
-
111
- export type Api_Video_Source_Create = {
112
- fps: string
113
- height: number
114
- login: string
115
- name: string
116
- password: string
117
- url: string
118
- width: number
119
- comment?: string
120
- domed?: boolean
121
- video_source_ids?: string[]
122
- snapshot?: string
123
- }
1
+ import { Api_Status_DTO } from '@/api/types/Api_Tasks'
2
+
3
+ export type Api_Video_Source = {
4
+ id: string
5
+ name: string
6
+ login: string
7
+ password: string
8
+ camera_id: string | null
9
+ comment: string | null
10
+ data: unknown | null
11
+ snapshot_path: string | null
12
+ url: string
13
+ updated_at: string
14
+ created_at: string
15
+ fps: string
16
+ domed: boolean
17
+ height: number
18
+ width: number
19
+ }
20
+
21
+ export type Api_Work_Zone_Search = {
22
+ id: string
23
+ name: string
24
+ title: string
25
+ type: number
26
+ parent_id: string | null
27
+ created_at: string
28
+ deleted_at: string | null
29
+ updated_at: string
30
+ description: string
31
+ detect_face: boolean
32
+ detect_helmet: boolean
33
+ detect_mask: boolean
34
+ detect_work_time: boolean
35
+ detect_work_zone: boolean
36
+ has_tasks: boolean
37
+ is_parent: boolean
38
+ x0: number
39
+ x1: number
40
+ y0: number
41
+ y1: number
42
+ video_source: Api_Video_Source
43
+ video_source_id: string
44
+ warehouse_by_work_zone_instruments: unknown[]
45
+ }
46
+
47
+ export type Api_Work_Zone_Usage_User = {
48
+ id: string
49
+ user_id: string
50
+ user_full_name: string
51
+ work_zone_id: string
52
+ start_interval: string
53
+ end_interval: string
54
+ minutes: number
55
+ }
56
+
57
+ export type Api_Work_Zone_Task = {
58
+ id: string
59
+ name: string
60
+ plan_date: string
61
+ planned_start: null | string
62
+ planned_end: null | string
63
+ deadline: string
64
+ is_critical_path: boolean | null
65
+ is_expired: boolean
66
+ power_output_MWh: number
67
+ cost_per_MWh: number | null
68
+ fact_start_date: null | string
69
+ fact_end_date: null | string
70
+ time_to_complete_sec: number | null
71
+ status: Api_Status_DTO[]
72
+ usage_users: Api_Work_Zone_Usage_User[]
73
+ }
74
+
75
+ export type Api_Work_Zone_Coords = {
76
+ x0: number
77
+ x1: number
78
+ y0: number
79
+ y1: number
80
+ }
81
+
82
+ export type Api_Work_Zone = {
83
+ id: string
84
+ title: string
85
+ created_at: string
86
+ video_source: { id: string; name: string }
87
+ coordinates: Api_Work_Zone_Coords
88
+ warehouse_by_work_zone_instruments: unknown[]
89
+ tasks: Api_Work_Zone_Task[]
90
+ }
91
+
92
+ export type Api_Video_Source_Search = {
93
+ comment: string
94
+ domed: boolean
95
+ fps: string
96
+ height: number
97
+ id: string
98
+ interactive_zones: unknown
99
+ login: string
100
+ name: string
101
+ password: string
102
+ related_video_sources: unknown[]
103
+ shapes: unknown[]
104
+ snapshot_path: string
105
+ url: string
106
+ video_source: Api_Video_Source_Search[]
107
+ width: number
108
+ work_zones: unknown[]
109
+ }
110
+
111
+ export type Api_Video_Source_Create = {
112
+ fps: string
113
+ height: number
114
+ login: string
115
+ name: string
116
+ password: string
117
+ url: string
118
+ width: number
119
+ comment?: string
120
+ domed?: boolean
121
+ video_source_ids?: string[]
122
+ snapshot?: string
123
+ }
@@ -1,167 +1,167 @@
1
- <template>
2
- <div class="app-input-new">
3
- <label v-if="label" class="app-input-new__label">
4
- {{ label }}
5
- <span v-if="required" class="required">*</span>
6
- </label>
7
-
8
- <q-input
9
- v-model="model"
10
- filled
11
- :type="inputType"
12
- :rules="rules"
13
- :placeholder="placeholder"
14
- :disable="disable"
15
- :readonly="readonly"
16
- :class="inputClass"
17
- :error="error"
18
- :autocomplete="autocomplete"
19
- @blur="emit('blur')"
20
- >
21
- <slot />
22
- <template #append>
23
- <slot name="append" />
24
- <q-icon
25
- v-if="type === 'password'"
26
- :name="isVisiblePass ? 'visibility' : 'visibility_off'"
27
- color="primary"
28
- class="cursor-pointer"
29
- @click="isVisiblePass = !isVisiblePass"
30
- />
31
- <q-icon
32
- v-if="clearable && String(model)?.length"
33
- name="close"
34
- class="cursor-pointer clear-input"
35
- @click="model = null"
36
- />
37
- <q-btn v-if="uuid" flat no-caps label="UUID" size="sm" class="q-ml-sm uuid-btn" @click="model = uuidv4()" />
38
- <q-icon
39
- v-if="copyable"
40
- name="content_copy"
41
- class="cursor-pointer q-ml-sm copy-icon"
42
- color="primary"
43
- :disable="!model"
44
- @click="copyToClipboard"
45
- />
46
- </template>
47
- </q-input>
48
- </div>
49
- </template>
50
-
51
- <script setup lang="ts">
52
- import { defineEmits, defineProps, computed, ref } from 'vue'
53
- import { uuidv4 } from '@/utils/helpers'
54
- import { notificationSettings } from '@/utils/notification'
55
- import { QInputProps, useQuasar } from 'quasar'
56
-
57
- const props = defineProps<
58
- QInputProps & {
59
- modelValue?: string | number | null
60
- label?: string
61
- placeholder?: string
62
- rules?: ((val: string | number | null | undefined) => boolean | string)[]
63
- inputClass?: string
64
- required?: boolean
65
- readonly?: boolean
66
- disable?: boolean
67
- uuid?: boolean
68
- clearable?: boolean
69
- copyable?: boolean
70
- error?: boolean
71
- autocomplete?: string
72
- }
73
- >()
74
-
75
- const emit = defineEmits<{
76
- (e: 'update:modelValue', val?: string | number | null): void
77
- (e: 'blur', val?: string | number | null): void
78
- }>()
79
-
80
- const $q = useQuasar()
81
-
82
- const isVisiblePass = ref(false)
83
-
84
- const model = computed({
85
- get: () => getValue(props.modelValue),
86
- set: (newValue?: string | number | null) => emit('update:modelValue', getValue(newValue)),
87
- })
88
-
89
- const inputType = computed(() => (props.type === 'password' && isVisiblePass.value ? 'text' : props.type))
90
-
91
- const getValue = (value?: string | number | null) => {
92
- if (props.type === 'number') return value ? +value : value
93
-
94
- return value
95
- }
96
-
97
- const copyToClipboard = () => {
98
- if (!model.value && model.value !== 0) return
99
-
100
- navigator.clipboard.writeText(model.value.toString()).then(() => {
101
- $q.notify(notificationSettings('success', 'Данные скопированы'))
102
- })
103
- }
104
- </script>
105
-
106
- <style scoped lang="scss">
107
- .app-input-new {
108
- display: flex;
109
- flex-direction: column;
110
- margin-bottom: 15px;
111
-
112
- &__label {
113
- font-size: 14px;
114
- font-weight: 700;
115
- color: #7d8592;
116
- }
117
-
118
- .required {
119
- color: #f65160;
120
- font-weight: bold;
121
- }
122
-
123
- .clear-input {
124
- color: #d8e0f0;
125
- }
126
-
127
- .uuid-btn {
128
- height: 32px;
129
- padding: 0 10px;
130
- border: 1px solid #3f8cff;
131
- color: #3f8cff;
132
- font-weight: 700;
133
- font-size: 14px;
134
- background: white;
135
- border-radius: 6px;
136
-
137
- :deep(.block) {
138
- line-height: normal;
139
- }
140
- }
141
-
142
- :deep(.q-placeholder) {
143
- color: #7d8592;
144
- }
145
-
146
- :deep(.q-field__control) {
147
- min-height: 58px;
148
- border-radius: 8px;
149
- border: 1px solid #d8e0f0;
150
- background: #fff;
151
- box-shadow: 0 1px 2px 0 rgba(184, 200, 224, 0.22);
152
- }
153
-
154
- :deep(.q-field--filled .q-field__control:before) {
155
- background: #fff !important;
156
- border: none;
157
- }
158
-
159
- :deep(.q-field--with-bottom) {
160
- padding-bottom: 0;
161
- }
162
-
163
- :deep(.q-field__bottom) {
164
- padding: 0;
165
- }
166
- }
167
- </style>
1
+ <template>
2
+ <div class="app-input-new">
3
+ <label v-if="label" class="app-input-new__label">
4
+ {{ label }}
5
+ <span v-if="required" class="required">*</span>
6
+ </label>
7
+
8
+ <q-input
9
+ v-model="model"
10
+ filled
11
+ :type="inputType"
12
+ :rules="rules"
13
+ :placeholder="placeholder"
14
+ :disable="disable"
15
+ :readonly="readonly"
16
+ :class="inputClass"
17
+ :error="error"
18
+ :autocomplete="autocomplete"
19
+ @blur="emit('blur')"
20
+ >
21
+ <slot />
22
+ <template #append>
23
+ <slot name="append" />
24
+ <q-icon
25
+ v-if="type === 'password'"
26
+ :name="isVisiblePass ? 'visibility' : 'visibility_off'"
27
+ color="primary"
28
+ class="cursor-pointer"
29
+ @click="isVisiblePass = !isVisiblePass"
30
+ />
31
+ <q-icon
32
+ v-if="clearable && String(model)?.length"
33
+ name="close"
34
+ class="cursor-pointer clear-input"
35
+ @click="model = null"
36
+ />
37
+ <q-btn v-if="uuid" flat no-caps label="UUID" size="sm" class="q-ml-sm uuid-btn" @click="model = uuidv4()" />
38
+ <q-icon
39
+ v-if="copyable"
40
+ name="content_copy"
41
+ class="cursor-pointer q-ml-sm copy-icon"
42
+ color="primary"
43
+ :disable="!model"
44
+ @click="copyToClipboard"
45
+ />
46
+ </template>
47
+ </q-input>
48
+ </div>
49
+ </template>
50
+
51
+ <script setup lang="ts">
52
+ import { defineEmits, defineProps, computed, ref } from 'vue'
53
+ import { uuidv4 } from '@/utils/helpers'
54
+ import { notificationSettings } from '@/utils/notification'
55
+ import { QInputProps, useQuasar } from 'quasar'
56
+
57
+ const props = defineProps<
58
+ QInputProps & {
59
+ modelValue?: string | number | null
60
+ label?: string
61
+ placeholder?: string
62
+ rules?: ((val: string | number | null | undefined) => boolean | string)[]
63
+ inputClass?: string
64
+ required?: boolean
65
+ readonly?: boolean
66
+ disable?: boolean
67
+ uuid?: boolean
68
+ clearable?: boolean
69
+ copyable?: boolean
70
+ error?: boolean
71
+ autocomplete?: string
72
+ }
73
+ >()
74
+
75
+ const emit = defineEmits<{
76
+ (e: 'update:modelValue', val?: string | number | null): void
77
+ (e: 'blur', val?: string | number | null): void
78
+ }>()
79
+
80
+ const $q = useQuasar()
81
+
82
+ const isVisiblePass = ref(false)
83
+
84
+ const model = computed({
85
+ get: () => getValue(props.modelValue),
86
+ set: (newValue?: string | number | null) => emit('update:modelValue', getValue(newValue)),
87
+ })
88
+
89
+ const inputType = computed(() => (props.type === 'password' && isVisiblePass.value ? 'text' : props.type))
90
+
91
+ const getValue = (value?: string | number | null) => {
92
+ if (props.type === 'number') return value ? +value : value
93
+
94
+ return value
95
+ }
96
+
97
+ const copyToClipboard = () => {
98
+ if (!model.value && model.value !== 0) return
99
+
100
+ navigator.clipboard.writeText(model.value.toString()).then(() => {
101
+ $q.notify(notificationSettings('success', 'Данные скопированы'))
102
+ })
103
+ }
104
+ </script>
105
+
106
+ <style scoped lang="scss">
107
+ .app-input-new {
108
+ display: flex;
109
+ flex-direction: column;
110
+ margin-bottom: 15px;
111
+
112
+ &__label {
113
+ font-size: 14px;
114
+ font-weight: 700;
115
+ color: #7d8592;
116
+ }
117
+
118
+ .required {
119
+ color: #f65160;
120
+ font-weight: bold;
121
+ }
122
+
123
+ .clear-input {
124
+ color: #d8e0f0;
125
+ }
126
+
127
+ .uuid-btn {
128
+ height: 32px;
129
+ padding: 0 10px;
130
+ border: 1px solid #3f8cff;
131
+ color: #3f8cff;
132
+ font-weight: 700;
133
+ font-size: 14px;
134
+ background: white;
135
+ border-radius: 6px;
136
+
137
+ :deep(.block) {
138
+ line-height: normal;
139
+ }
140
+ }
141
+
142
+ :deep(.q-placeholder) {
143
+ color: #7d8592;
144
+ }
145
+
146
+ :deep(.q-field__control) {
147
+ min-height: 58px;
148
+ border-radius: 8px;
149
+ border: 1px solid #d8e0f0;
150
+ background: #fff;
151
+ box-shadow: 0 1px 2px 0 rgba(184, 200, 224, 0.22);
152
+ }
153
+
154
+ :deep(.q-field--filled .q-field__control:before) {
155
+ background: #fff !important;
156
+ border: none;
157
+ }
158
+
159
+ :deep(.q-field--with-bottom) {
160
+ padding-bottom: 0;
161
+ }
162
+
163
+ :deep(.q-field__bottom) {
164
+ padding: 0;
165
+ }
166
+ }
167
+ </style>