bfg-common 1.4.387 → 1.4.388
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/assets/localization/local_be.json +5 -2
- package/assets/localization/local_en.json +5 -2
- package/assets/localization/local_hy.json +5 -2
- package/assets/localization/local_kk.json +5 -2
- package/assets/localization/local_ru.json +5 -2
- package/assets/localization/local_zh.json +5 -2
- package/components/common/layout/theHeader/feedback/new/additionalDetails/AdditionalDetails.vue +258 -1
- package/components/common/layout/theHeader/feedback/new/additionalDetails/Headline.vue +1 -1
- package/package.json +1 -1
|
@@ -2248,7 +2248,8 @@
|
|
|
2248
2248
|
"viewTarget": "Праглядзець мэта",
|
|
2249
2249
|
"alarmDetails": "Дэталі сігналізацыі",
|
|
2250
2250
|
"viewObject": "Прагляд аб'екта",
|
|
2251
|
-
"eventDetails": "Падрабязнасці падзеі"
|
|
2251
|
+
"eventDetails": "Падрабязнасці падзеі",
|
|
2252
|
+
"noResultsFound": "Ніякіх вынікаў знойдзена не было"
|
|
2252
2253
|
},
|
|
2253
2254
|
"auth": {
|
|
2254
2255
|
"welcomeTo": "Сардэчна запрашаем у",
|
|
@@ -2828,6 +2829,8 @@
|
|
|
2828
2829
|
"feedback": {
|
|
2829
2830
|
"additionalDetailsHelp": "Даведка па дадатковых звестках",
|
|
2830
2831
|
"additionalDetailsTooltip": "Каб атрымаць дадатковую інфармацыю, вы можаце альбо зрабіць скрыншот экрана, альбо загрузіць выяву ў фармаце .png або .jpeg.",
|
|
2831
|
-
"annotate": "Анатаваць"
|
|
2832
|
+
"annotate": "Анатаваць",
|
|
2833
|
+
"annotateScreenshot": "Анатаваць скрыншот",
|
|
2834
|
+
"annotateImage": "Анатаваць малюнак"
|
|
2832
2835
|
}
|
|
2833
2836
|
}
|
|
@@ -2252,7 +2252,8 @@
|
|
|
2252
2252
|
"viewTarget": "View Target",
|
|
2253
2253
|
"alarmDetails": "Alarm Details",
|
|
2254
2254
|
"viewObject": "View Object",
|
|
2255
|
-
"eventDetails": "Event Details"
|
|
2255
|
+
"eventDetails": "Event Details",
|
|
2256
|
+
"noResultsFound": "No results found"
|
|
2256
2257
|
},
|
|
2257
2258
|
"auth": {
|
|
2258
2259
|
"welcomeTo": "Welcome to",
|
|
@@ -2832,6 +2833,8 @@
|
|
|
2832
2833
|
"feedback": {
|
|
2833
2834
|
"additionalDetailsHelp": "Additional Details Help",
|
|
2834
2835
|
"additionalDetailsTooltip": "For additional details, you can either take a screenshot of your screen or upload an image in .png or .jpeg format.",
|
|
2835
|
-
"annotate": "Annotate"
|
|
2836
|
+
"annotate": "Annotate",
|
|
2837
|
+
"annotateScreenshot": "Annotate Screenshot",
|
|
2838
|
+
"annotateImage": "Annotate Image"
|
|
2836
2839
|
}
|
|
2837
2840
|
}
|
|
@@ -2252,7 +2252,8 @@
|
|
|
2252
2252
|
"viewTarget": "Դիտել թիրախը",
|
|
2253
2253
|
"alarmDetails": "Տագնապային մանրամասներ",
|
|
2254
2254
|
"viewObject": "Դիտել օբյեկտը",
|
|
2255
|
-
"eventDetails": "Միջոցառման մանրամասները"
|
|
2255
|
+
"eventDetails": "Միջոցառման մանրամասները",
|
|
2256
|
+
"noResultsFound": "Ոչ մի արդյունք չի գտնվել"
|
|
2256
2257
|
},
|
|
2257
2258
|
"auth": {
|
|
2258
2259
|
"welcomeTo": "Բարի գալուստ",
|
|
@@ -2832,6 +2833,8 @@
|
|
|
2832
2833
|
"feedback": {
|
|
2833
2834
|
"additionalDetailsHelp": "Լրացուցիչ մանրամասներ Օգնություն",
|
|
2834
2835
|
"additionalDetailsTooltip": "Լրացուցիչ մանրամասների համար կարող եք կամ լուսանկարել ձեր էկրանը կամ վերբեռնել պատկեր .png կամ .jpeg ձևաչափով:",
|
|
2835
|
-
"annotate": "Նշում"
|
|
2836
|
+
"annotate": "Նշում",
|
|
2837
|
+
"annotateScreenshot": "Նշել սքրինշոթը",
|
|
2838
|
+
"annotateImage": "Նշել պատկերը"
|
|
2836
2839
|
}
|
|
2837
2840
|
}
|
|
@@ -2251,7 +2251,8 @@
|
|
|
2251
2251
|
"viewTarget": "Мақсатты көру",
|
|
2252
2252
|
"alarmDetails": "Дабыл мәліметтері",
|
|
2253
2253
|
"viewObject": "Көру нысаны",
|
|
2254
|
-
"eventDetails": "Оқиға мәліметтері"
|
|
2254
|
+
"eventDetails": "Оқиға мәліметтері",
|
|
2255
|
+
"noResultsFound": "Нәтижелер табылмады"
|
|
2255
2256
|
},
|
|
2256
2257
|
"auth": {
|
|
2257
2258
|
"welcomeTo": "Қош келдіңіз",
|
|
@@ -2831,6 +2832,8 @@
|
|
|
2831
2832
|
"feedback": {
|
|
2832
2833
|
"additionalDetailsHelp": "Қосымша мәліметтер анықтамасы",
|
|
2833
2834
|
"additionalDetailsTooltip": "Қосымша мәліметтер алу үшін экранның скриншотын түсіруге немесе суретті .png немесе .jpeg пішімінде жүктеп салуға болады.",
|
|
2834
|
-
"annotate": "Аннотация жазу"
|
|
2835
|
+
"annotate": "Аннотация жазу",
|
|
2836
|
+
"annotateScreenshot": "Скриншотқа түсініктеме жазу",
|
|
2837
|
+
"annotateImage": "Суретке түсініктеме жазу"
|
|
2835
2838
|
}
|
|
2836
2839
|
}
|
|
@@ -2253,7 +2253,8 @@
|
|
|
2253
2253
|
"viewTarget": "Посмотреть цель",
|
|
2254
2254
|
"alarmDetails": "Детали тревоги",
|
|
2255
2255
|
"viewObject": "Посмотреть объект",
|
|
2256
|
-
"eventDetails": "Подробности о событии"
|
|
2256
|
+
"eventDetails": "Подробности о событии",
|
|
2257
|
+
"noResultsFound": "Никаких результатов найдено не было"
|
|
2257
2258
|
},
|
|
2258
2259
|
"auth": {
|
|
2259
2260
|
"welcomeTo": "Добро пожаловать в",
|
|
@@ -2833,6 +2834,8 @@
|
|
|
2833
2834
|
"feedback": {
|
|
2834
2835
|
"additionalDetailsHelp": "Дополнительная информация Помощь",
|
|
2835
2836
|
"additionalDetailsTooltip": "Для получения дополнительной информации вы можете сделать снимок экрана или загрузить изображение в формате .png или .jpeg.",
|
|
2836
|
-
"annotate": "Аннотировать"
|
|
2837
|
+
"annotate": "Аннотировать",
|
|
2838
|
+
"annotateScreenshot": "Аннотировать снимок экрана",
|
|
2839
|
+
"annotateImage": "Аннотировать изображение"
|
|
2837
2840
|
}
|
|
2838
2841
|
}
|
|
@@ -2250,7 +2250,8 @@
|
|
|
2250
2250
|
"viewTarget": "查看目标",
|
|
2251
2251
|
"alarmDetails": "报警详情",
|
|
2252
2252
|
"viewObject": "查看对象",
|
|
2253
|
-
"eventDetails": "活动详情"
|
|
2253
|
+
"eventDetails": "活动详情",
|
|
2254
|
+
"noResultsFound": "未找到结果"
|
|
2254
2255
|
},
|
|
2255
2256
|
"auth": {
|
|
2256
2257
|
"welcomeTo": "欢迎来到",
|
|
@@ -2830,6 +2831,8 @@
|
|
|
2830
2831
|
"feedback": {
|
|
2831
2832
|
"additionalDetailsHelp": "其他详细信息帮助",
|
|
2832
2833
|
"additionalDetailsTooltip": "有关更多详细信息,您可以截取屏幕截图或上传 .png 或 .jpeg 格式的图像。",
|
|
2833
|
-
"annotate": "注释"
|
|
2834
|
+
"annotate": "注释",
|
|
2835
|
+
"annotateScreenshot": "注释屏幕截图",
|
|
2836
|
+
"annotateImage": "注释图像"
|
|
2834
2837
|
}
|
|
2835
2838
|
}
|
package/components/common/layout/theHeader/feedback/new/additionalDetails/AdditionalDetails.vue
CHANGED
|
@@ -2,13 +2,22 @@
|
|
|
2
2
|
<div class="additional-details">
|
|
3
3
|
<common-layout-the-header-feedback-new-additional-details-headline />
|
|
4
4
|
|
|
5
|
-
<
|
|
5
|
+
<ui-alert
|
|
6
|
+
v-if="hasTakeScreenshot"
|
|
7
|
+
test-id="additional-details-info-alert"
|
|
8
|
+
:messages="[localization.common.screenshotQualityMayVary]"
|
|
9
|
+
type="info"
|
|
10
|
+
class="additional-details__alert"
|
|
11
|
+
></ui-alert>
|
|
12
|
+
|
|
13
|
+
<div v-if="!hasTakeScreenshot" class="flex gap-4 button-container">
|
|
6
14
|
<ui-button
|
|
7
15
|
test-id="feedback-take-screenshot-btn"
|
|
8
16
|
size="md"
|
|
9
17
|
type="grey"
|
|
10
18
|
min-width="96px"
|
|
11
19
|
class="take-screenshot"
|
|
20
|
+
@click="onTakeScreenshot"
|
|
12
21
|
>
|
|
13
22
|
<ui-icon
|
|
14
23
|
name="take-screenshot"
|
|
@@ -41,16 +50,210 @@
|
|
|
41
50
|
type="file"
|
|
42
51
|
accept=".png, .jpeg"
|
|
43
52
|
data-id="feedback-file-load-input"
|
|
53
|
+
@change="onUploadFile"
|
|
44
54
|
/>
|
|
45
55
|
</ui-button>
|
|
46
56
|
</div>
|
|
57
|
+
|
|
58
|
+
<div
|
|
59
|
+
id="feedbackImgWrap"
|
|
60
|
+
ref="feedbackImgWrap"
|
|
61
|
+
class="preview-container"
|
|
62
|
+
:class="!hasTakeScreenshot && 'disabled'"
|
|
63
|
+
>
|
|
64
|
+
<div class="preview-container__backdrop">
|
|
65
|
+
<div>
|
|
66
|
+
<ui-button
|
|
67
|
+
test-id="feedback-image-annotate-btn"
|
|
68
|
+
size="md"
|
|
69
|
+
type="grey"
|
|
70
|
+
class=""
|
|
71
|
+
>
|
|
72
|
+
<ui-icon
|
|
73
|
+
name="annotate-icon"
|
|
74
|
+
width="16"
|
|
75
|
+
height="16"
|
|
76
|
+
class="feedback__btn-icon"
|
|
77
|
+
/>
|
|
78
|
+
{{ localization.feedback.annotate }}
|
|
79
|
+
</ui-button>
|
|
80
|
+
|
|
81
|
+
<ui-button
|
|
82
|
+
test-id="feedback-image-remove-btn"
|
|
83
|
+
size="md"
|
|
84
|
+
type="grey"
|
|
85
|
+
class=""
|
|
86
|
+
@click="onRemoveScreenshot"
|
|
87
|
+
>
|
|
88
|
+
<ui-icon
|
|
89
|
+
name="delete"
|
|
90
|
+
width="16"
|
|
91
|
+
height="16"
|
|
92
|
+
class="feedback__btn-icon"
|
|
93
|
+
/>
|
|
94
|
+
{{ localization.common.remove }}
|
|
95
|
+
</ui-button>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
<canvas
|
|
99
|
+
id="feedbackImg"
|
|
100
|
+
ref="feedbackImg"
|
|
101
|
+
class="preview-container__image"
|
|
102
|
+
></canvas>
|
|
103
|
+
<canvas id="feedbackImgBlank" style="display: none"></canvas>
|
|
104
|
+
</div>
|
|
47
105
|
</div>
|
|
48
106
|
</template>
|
|
49
107
|
|
|
50
108
|
<script lang="ts" setup>
|
|
109
|
+
import html2canvas from 'html2canvas'
|
|
51
110
|
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
52
111
|
|
|
53
112
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
113
|
+
|
|
114
|
+
const emits = defineEmits<{
|
|
115
|
+
(event: 'screen-shot', value: any): void
|
|
116
|
+
}>()
|
|
117
|
+
|
|
118
|
+
const hasTakeScreenshot = ref<boolean>(false)
|
|
119
|
+
const isFileLoad = ref(null)
|
|
120
|
+
const feedbackImgWrap = ref()
|
|
121
|
+
const feedbackImg = ref()
|
|
122
|
+
const memoryParentModalDialog = ref<string>('')
|
|
123
|
+
const memoryParentMain = ref<string>('')
|
|
124
|
+
|
|
125
|
+
const drawingArray: any = []
|
|
126
|
+
// const indexArray = 0 // index of feedbackImg itself
|
|
127
|
+
const indexArray = ref<number>(0) // index of feedbackImg itself
|
|
128
|
+
// let drawColor = ''
|
|
129
|
+
// let drawWidth = ''
|
|
130
|
+
|
|
131
|
+
const onTakeScreenshot = (): void => {
|
|
132
|
+
hasTakeScreenshot.value = true
|
|
133
|
+
const value = {
|
|
134
|
+
hasTakeScreenshot: true,
|
|
135
|
+
width: window.outerWidth + 'px',
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
emits('screen-shot', value)
|
|
139
|
+
const parentMain = document.getElementById('feedbackId')
|
|
140
|
+
const parentModalDialog = document.getElementById('feedback-modal-dialog-Id')
|
|
141
|
+
if (!parentMain || !parentModalDialog) return
|
|
142
|
+
|
|
143
|
+
console.log(4444)
|
|
144
|
+
|
|
145
|
+
const display = parentMain.style.display
|
|
146
|
+
memoryParentMain.value = parentMain.style.display
|
|
147
|
+
parentMain.style.display = 'none'
|
|
148
|
+
html2canvas(document.body).then(function (thisCanvas) {
|
|
149
|
+
parentMain.style.display = display
|
|
150
|
+
memoryParentMain.value = parentMain.style.width
|
|
151
|
+
memoryParentModalDialog.value = parentModalDialog.style.width
|
|
152
|
+
parentMain.style.width = window.outerWidth + 'px'
|
|
153
|
+
parentModalDialog.style.width = window.outerWidth + 'px'
|
|
154
|
+
parentModalDialog.style.margin = '20px'
|
|
155
|
+
const context = feedbackImg.value.getContext('2d')
|
|
156
|
+
feedbackImg.value.width = thisCanvas.width
|
|
157
|
+
feedbackImg.value.height = thisCanvas.height
|
|
158
|
+
context.drawImage(
|
|
159
|
+
thisCanvas,
|
|
160
|
+
0,
|
|
161
|
+
0,
|
|
162
|
+
feedbackImg.value.width,
|
|
163
|
+
feedbackImg.value.height
|
|
164
|
+
)
|
|
165
|
+
drawingArray.length = 0
|
|
166
|
+
indexArray.value = 0
|
|
167
|
+
drawingArray.push(
|
|
168
|
+
context.getImageData(
|
|
169
|
+
0,
|
|
170
|
+
0,
|
|
171
|
+
feedbackImg.value.width,
|
|
172
|
+
feedbackImg.value.height
|
|
173
|
+
)
|
|
174
|
+
)
|
|
175
|
+
})
|
|
176
|
+
}
|
|
177
|
+
const onUploadFile = (): void => {
|
|
178
|
+
hasTakeScreenshot.value = true
|
|
179
|
+
if (!isFileLoad.value) return
|
|
180
|
+
|
|
181
|
+
const isFileRead = new FileReader()
|
|
182
|
+
if (!isFileRead) return
|
|
183
|
+
|
|
184
|
+
isFileRead.readAsDataURL(isFileLoad.value.files[0])
|
|
185
|
+
isFileRead.onload = (): void => {
|
|
186
|
+
const img = new Image()
|
|
187
|
+
if (!feedbackImg.value) return
|
|
188
|
+
|
|
189
|
+
const context = feedbackImg.value.getContext('2d')
|
|
190
|
+
img.onload = (): void => {
|
|
191
|
+
feedbackImg.value.width = img.width
|
|
192
|
+
feedbackImg.value.height = img.height
|
|
193
|
+
context.drawImage(img, 0, 0, img.width, img.height)
|
|
194
|
+
drawingArray.length = 0
|
|
195
|
+
indexArray.value = 0
|
|
196
|
+
drawingArray.push(
|
|
197
|
+
context.getImageData(
|
|
198
|
+
0,
|
|
199
|
+
0,
|
|
200
|
+
feedbackImg.value.width,
|
|
201
|
+
feedbackImg.value.height
|
|
202
|
+
)
|
|
203
|
+
)
|
|
204
|
+
const value = {
|
|
205
|
+
hasTakeScreenshot: true,
|
|
206
|
+
width: window.outerWidth + 'px',
|
|
207
|
+
}
|
|
208
|
+
emits('screen-shot', value)
|
|
209
|
+
const parentMain = document.getElementById('feedbackId')
|
|
210
|
+
const parentModalDialog = document.getElementById(
|
|
211
|
+
'feedback-modal-dialog-Id'
|
|
212
|
+
)
|
|
213
|
+
if (!parentMain || !parentModalDialog) return
|
|
214
|
+
|
|
215
|
+
parentMain.style.width = window.outerWidth + 'px'
|
|
216
|
+
parentModalDialog.style.width = window.outerWidth + 'px'
|
|
217
|
+
parentModalDialog.style.margin = '20px'
|
|
218
|
+
}
|
|
219
|
+
img.src = isFileRead.result
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const onRemoveScreenshot = (): void => {
|
|
224
|
+
hasTakeScreenshot.value = false
|
|
225
|
+
const parentMain = document.getElementById('feedbackId')
|
|
226
|
+
const parentModalDialog = document.getElementById('feedback-modal-dialog-Id')
|
|
227
|
+
if (!parentMain || !parentModalDialog) return
|
|
228
|
+
|
|
229
|
+
parentMain.style.width = memoryParentMain.value
|
|
230
|
+
parentModalDialog.style.width = memoryParentModalDialog.value
|
|
231
|
+
const context = feedbackImg.value.getContext('2d')
|
|
232
|
+
context.fillStyle = 'green'
|
|
233
|
+
context.fillRect(0, 0, feedbackImg.value.width, feedbackImg.value.height)
|
|
234
|
+
feedbackImg.value.width = 0
|
|
235
|
+
feedbackImg.value.height = 0
|
|
236
|
+
feedbackImgWrap.value.style.width = 0 + 'px'
|
|
237
|
+
feedbackImgWrap.value.style.height = 0 + 'px'
|
|
238
|
+
const value = {
|
|
239
|
+
hasTakeScreenshot: false,
|
|
240
|
+
width: memoryParentModalDialog.value,
|
|
241
|
+
}
|
|
242
|
+
emits('screen-shot', value)
|
|
243
|
+
clearAll()
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
const clearAll = (): void => {
|
|
247
|
+
const context = feedbackImg.value.getContext('2d')
|
|
248
|
+
// drawColor = ''
|
|
249
|
+
// drawWidth = ''
|
|
250
|
+
if (indexArray.value <= 0) return
|
|
251
|
+
while (indexArray.value > 0) {
|
|
252
|
+
drawingArray.pop()
|
|
253
|
+
indexArray.value -= 1
|
|
254
|
+
context.putImageData(drawingArray[indexArray.value], 0, 0)
|
|
255
|
+
}
|
|
256
|
+
}
|
|
54
257
|
</script>
|
|
55
258
|
|
|
56
259
|
<style lang="scss" scoped>
|
|
@@ -79,5 +282,59 @@ const localization = computed<UI_I_Localization>(() => useLocal())
|
|
|
79
282
|
}
|
|
80
283
|
}
|
|
81
284
|
}
|
|
285
|
+
&__alert {
|
|
286
|
+
margin-bottom: 16px;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
.preview-container {
|
|
290
|
+
width: 500px;
|
|
291
|
+
height: 280px;
|
|
292
|
+
position: relative;
|
|
293
|
+
&.disabled {
|
|
294
|
+
display: none;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
&__backdrop {
|
|
298
|
+
display: none;
|
|
299
|
+
position: absolute;
|
|
300
|
+
top: 0;
|
|
301
|
+
left: 0;
|
|
302
|
+
width: 100%;
|
|
303
|
+
height: 100%;
|
|
304
|
+
background: rgba(27, 42, 55, 0.32);
|
|
305
|
+
backdrop-filter: blur(1.5px);
|
|
306
|
+
border-radius: 8px;
|
|
307
|
+
transition: opacity 0.3s ease;
|
|
308
|
+
opacity: 0;
|
|
309
|
+
|
|
310
|
+
& > div {
|
|
311
|
+
display: flex;
|
|
312
|
+
align-items: center;
|
|
313
|
+
gap: 12px;
|
|
314
|
+
.ui-btn {
|
|
315
|
+
width: initial;
|
|
316
|
+
|
|
317
|
+
&:last-child {
|
|
318
|
+
color: #ea3223;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
&__image {
|
|
325
|
+
width: inherit;
|
|
326
|
+
height: inherit;
|
|
327
|
+
border-radius: 8px;
|
|
328
|
+
.disabled & {
|
|
329
|
+
display: none;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
&:hover &__backdrop {
|
|
334
|
+
display: flex;
|
|
335
|
+
align-items: center;
|
|
336
|
+
justify-content: center;
|
|
337
|
+
opacity: 1;
|
|
338
|
+
}
|
|
82
339
|
}
|
|
83
340
|
</style>
|