hl-core 0.0.10-beta.79 → 0.0.10-beta.80

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.
@@ -0,0 +1,73 @@
1
+ <template>
2
+ <div v-if="isVisible && items.length && items.length > 1" :class="$styles.blueBgLight" class="hidden lg:flex border-b py-3 px-5 items-center justify-between">
3
+ <nav class="flex items-center text-sm leading-6 tracking-[0.5px] text-[#99A3B3]">
4
+ <template v-for="(item, index) in items" :key="item.to">
5
+ <a v-if="index !== items.length - 1" @click.prevent="handleClick(item)" :to="item.to" class="hover:text-[#071222] transition-colors cursor-pointer">
6
+ {{ item.label }}
7
+ </a>
8
+ <span v-else class="text-[#071222]">
9
+ {{ item.label }}
10
+ </span>
11
+ <i v-if="index !== items.length - 1" class="mdi mdi-chevron-right mx-1.5 text-lg text-[#99A3B3]" />
12
+ </template>
13
+ </nav>
14
+ <v-btn variant="plain" size="24" :ripple="false" @click="handleClose">
15
+ <i class="mdi mdi-close text-[20px] text-[#071222]" />
16
+ </v-btn>
17
+ </div>
18
+ </template>
19
+
20
+ <script setup lang="ts">
21
+ import type { BreadcrumbItem } from '../../types/index';
22
+ import type { RouteLocationRaw } from 'vue-router';
23
+ import { MenuItem } from '#imports';
24
+
25
+ const dataStore = useDataStore();
26
+ const router = useRouter();
27
+ const isVisible = ref(true);
28
+
29
+ const items = computed(() => dataStore.breadcrumb);
30
+
31
+ const handleClose = () => {
32
+ isVisible.value = false;
33
+ };
34
+ const handleClick = (item: BreadcrumbItem) => {
35
+ // 1. Обработка редиректов в родительское окно (Мостик)
36
+ if (item.to === '/Insurance-Product') {
37
+ dataStore.sendToParent(constants.postActions.toHomePage, null);
38
+ return;
39
+ }
40
+ if (item.to === '/History') {
41
+ dataStore.sendToParent(constants.postActions.toHistory, null);
42
+ return;
43
+ }
44
+
45
+ // 2. Универсальное получение targetTab
46
+ let targetTab: string | null = null;
47
+
48
+ // Если query передан отдельно в item
49
+ if (item.query?.tab) {
50
+ targetTab = item.query.tab as string;
51
+ }
52
+ // Если query зашит внутри item.to (как строка или объект)
53
+ else if (item.to) {
54
+ // router.resolve магически превращает '/path?tab=1' или {path: '..', query: {tab: 1}}
55
+ // в стандартизированный объект роута
56
+ const resolved = router.resolve(item.to as RouteLocationRaw);
57
+ targetTab = resolved.query?.tab as string;
58
+ }
59
+
60
+ // 3. Синхронизация меню в сторе
61
+ if (targetTab) {
62
+ const queryTab = dataStore.menuItems.find((i: MenuItem) => i.id === targetTab);
63
+ dataStore.menu.selectedItem = queryTab || new MenuItem();
64
+ }
65
+
66
+ // 4. Переход
67
+ if (item.to) {
68
+ router.push(item.to as RouteLocationRaw);
69
+ }
70
+ };
71
+ </script>
72
+
73
+ <style scoped></style>
@@ -2,19 +2,24 @@
2
2
  <div class="flex flex-col gap-[10px] w-full align-center">
3
3
  <v-expansion-panels :flat="true">
4
4
  <v-expansion-panel class="!rounded-[8px]">
5
- <v-expansion-panel-title class="!text-[12px] border border-[#00000014]"> Как получить цифровой документ </v-expansion-panel-title>
5
+ <v-expansion-panel-title class="!text-[12px] border border-[#00000014]">{{ $appContextStore.t('howToGetDigitalDocument') }}</v-expansion-panel-title>
6
6
  <v-expansion-panel-text class="text-[12px] text-[#464f60]">
7
- 1. Выберите тип документа.<br /><br />
8
- 2. Через приложение eGov mobile и другие приложения: <br />
9
- Откройте раздел "Цифровые документы". <br />
10
- Выберите нужный документ и откройте доступ. <br />
11
- Введите 6-значный код в поле «Код подтверждения». <br />
12
- Нажмите "Получить документ".<br /><br />
13
- 3. Через SMS: <br />
14
- Нажмите "Отправить код". <br />
15
- Введите полученный SMS-код. <br />
16
- Нажмите "Получить документ".<br /><br />
17
- 4. При ошибке нажмите <a href="javascript:void(0);" class="text-blue-600" @click.prevent="emit('updateDigitalDocuments')">обновить профиль</a><br />
7
+ 1. {{ $appContextStore.t('selectDocumentType') }} <br /><br />
8
+ 2. {{ $appContextStore.t('viaEGovMobileAndOtherApps') }}: <br />
9
+ {{ $appContextStore.t('openDigitalDocumentsSection') }} <br />
10
+ {{ $appContextStore.t('selectDocumentAndGrantAccess') }} <br />
11
+ {{ $appContextStore.t('enter6DigitCodeInConfirmationField') }} <br />
12
+ {{ $appContextStore.t('clickGetDocument') }} <br /><br />
13
+ 3. {{ $appContextStore.t('viaSms') }}: <br />
14
+ {{ $appContextStore.t('clickSendCode') }} <br />
15
+ {{ $appContextStore.t('enterReceivedSmsCode') }} <br />
16
+ {{ $appContextStore.t('clickGetDocument') }} <br /><br />
17
+ <template v-if="currentLocale === 'kz'">
18
+ 4. Қате жағдайда <a href="javascript:void(0);" class="text-blue-600" @click.prevent="emit('updateDigitalDocuments')">профильді жаңартуды</a> басыңыз<br />
19
+ </template>
20
+ <template v-else>
21
+ 4. При ошибке нажмите <a href="javascript:void(0);" class="text-blue-600" @click.prevent="emit('updateDigitalDocuments')">обновить профиль</a><br />
22
+ </template>
18
23
  </v-expansion-panel-text>
19
24
  </v-expansion-panel>
20
25
  </v-expansion-panels>
@@ -23,20 +28,27 @@
23
28
  <div class="digital-document-otp flex flex-col">
24
29
  <base-otp-input v-model="otpCode" @keyup.enter.prevent="otpCode.length === otpLength && emitGetCode()" />
25
30
  <span v-if="!loading && otpSendDisabled" class="text-center" :class="[$styles.mutedText]">
26
- Введите код цифрового документа из <span class="underline underline-offset-2">eGov Mobile</span> или
27
- <span class="underline underline-offset-2">банковского приложения</span>.
31
+ <template v-if="currentLocale === 'kz'">
32
+ <span class="underline underline-offset-2">eGov Mobile</span> немесе <span class="underline underline-offset-2">банк қосымшасынан</span> алынған цифрлық құжат кодын
33
+ енгізіңіз.
34
+ </template>
35
+ <template v-else>
36
+ Введите код цифрового документа из <span class="underline underline-offset-2">eGov Mobile</span> или
37
+ <span class="underline underline-offset-2">банковского приложения</span>.
38
+ </template>
28
39
  </span>
29
40
  </div>
30
41
  </div>
31
42
  <div class="w-full d-flex flex-col sm:flex-row gap-4">
32
- <base-btn v-if="!otpSendDisabled" :disabled="loading" :loading="loading" :btn="$styles.whiteBorderBtn" text="Отправить SMS-код" @click="emitGetCode" />
33
- <base-btn :disabled="loading" :loading="loading" text="Получить документ" @click="emitGetDocument" />
43
+ <base-btn v-if="!otpSendDisabled" :disabled="loading" :loading="loading" :btn="$styles.whiteBorderBtn" :text="$appContextStore.t('sendSmsCode')" @click="emitGetCode" />
44
+ <base-btn :disabled="loading" :loading="loading" :text="$appContextStore.t('getDocument')" @click="emitGetDocument" />
34
45
  </div>
35
46
  </div>
36
47
  </template>
37
48
 
38
49
  <script setup lang="ts">
39
50
  import type { DigitalDocTypes } from '../../types';
51
+ import { useI18n } from 'vue-i18n';
40
52
 
41
53
  const props = defineProps({
42
54
  documentItems: {
@@ -61,10 +73,11 @@ const emit = defineEmits(['getCode', 'getDigitalDocument', 'updateDigitalDocumen
61
73
  const dataStore = useDataStore();
62
74
  const documentType = ref<DigitalDocTypes | null>(null);
63
75
  const otpCode = ref<string>('');
76
+ const appContextStore = useAppContextStore();
64
77
 
65
78
  const emitGetCode = () => {
66
79
  if (!documentType.value) {
67
- showToaster('error', 'Выберите тип документа', 3000);
80
+ showToaster('error', appContextStore.t('selectDocumentType'), 3000);
68
81
  return;
69
82
  }
70
83
 
@@ -73,7 +86,7 @@ const emitGetCode = () => {
73
86
 
74
87
  const emitGetDocument = () => {
75
88
  if (!otpCode.value) {
76
- showToaster('error', 'Введите код подтверждения', 3000);
89
+ showToaster('error', appContextStore.t('enterConfirmationCode'), 3000);
77
90
  return;
78
91
  }
79
92
 
@@ -6,7 +6,7 @@
6
6
  <base-panel-input
7
7
  v-if="!!member.digitalDocument"
8
8
  v-model="member.digitalDocument.fileName"
9
- label="Цифровой документ"
9
+ :label="$appContextStore.t('digitalDocument')"
10
10
  :readonly="disabled"
11
11
  :clearable="!disabled"
12
12
  append-inner-icon="mdi mdi-chevron-right"
@@ -18,7 +18,7 @@
18
18
  :class="[$styles.whiteBg]"
19
19
  @click="$emit('openDigitalDocPanel', member.iin)"
20
20
  >
21
- <p :class="[$styles.greyText]">Получить цифровой документ</p>
21
+ <p :class="[$styles.greyText]">{{ $appContextStore.t('getDigitalDocument') }}</p>
22
22
  <div class="cursor-pointer">
23
23
  <i class="mdi mdi-file-document text-xl" :class="[$styles.blueText]"></i>
24
24
  </div>
@@ -14,8 +14,8 @@
14
14
  :six-weeks="true"
15
15
  :min-date="minDate"
16
16
  :max-date="maxDate"
17
- cancel-text="Отменить"
18
- select-text="Выбрать"
17
+ :cancel-text="$appContextStore.t('buttons.cancel')"
18
+ :select-text="$appContextStore.t('choose')"
19
19
  >
20
20
  <template #trigger>
21
21
  <v-icon icon="mdi mdi-calendar-blank-outline cursor-pointer" />
@@ -9,8 +9,8 @@
9
9
  format="MM.yyyy"
10
10
  :teleport="true"
11
11
  :close-on-scroll="true"
12
- cancel-text="Отменить"
13
- select-text="Выбрать"
12
+ :cancel-text="$appContextStore.t('buttons.cancel')"
13
+ :select-text="$appContextStore.t('choose')"
14
14
  @update:modelValue="$emit('update:modelValue', $event)"
15
15
  />
16
16
  </template>
@@ -41,6 +41,7 @@ export default defineComponent({
41
41
  setup(props) {
42
42
  const mask = computed(() => (props.control.maska ? useMask()[props.control.maska] : ''));
43
43
  const dataStore = useDataStore();
44
+ const appContextStore = useAppContextStore();
44
45
 
45
46
  const textFieldProps = computed(() => {
46
47
  return {
@@ -61,8 +62,8 @@ export default defineComponent({
61
62
  clearable: false,
62
63
  disabled: props.control.disabled,
63
64
  readonly: props.control.readonly,
64
- selectText: 'Выбрать',
65
- cancelText: 'Закрыть',
65
+ selectText: appContextStore.t('choose'),
66
+ cancelText: appContextStore.t('buttons.close'),
66
67
  closeOnScroll: true,
67
68
  transitions: false,
68
69
  teleport: true,
@@ -15,7 +15,7 @@
15
15
  @onMore="$emit('onMore')"
16
16
  />
17
17
  <slot key="slot-content" name="content"></slot>
18
- <section key="main" class="max-h-[90dvh] overflow-y-scroll" :class="[$styles.flexColNav]">
18
+ <section key="main" class="flex-1 overflow-y-scroll pb-[14px]" :class="[$styles.flexColNav]">
19
19
  <slot name="start"></slot>
20
20
  <base-fade-transition>
21
21
  <div v-if="$dataStore.menuItems && $dataStore.menuItems.length" class="flex flex-col gap-[10px]">
@@ -108,6 +108,7 @@ export default defineComponent({
108
108
  setup(props, { emit }) {
109
109
  const dataStore = useDataStore();
110
110
  const router = useRouter();
111
+ const appContextStore = useAppContextStore();
111
112
 
112
113
  const pickItem = async (item: MenuItem) => {
113
114
  if (item.title !== dataStore.menu.selectedItem.title && !dataStore.filters.disabled(item)) {
@@ -115,7 +116,7 @@ export default defineComponent({
115
116
  if (item.link && 'name' in item.link) {
116
117
  await router.push(item.link as RouteLocationNormalized);
117
118
  } else {
118
- showToaster('warning', 'Отсутствует ссылка для перехода');
119
+ showToaster('warning', appContextStore.t('missingRedirectLink'));
119
120
  }
120
121
  } else {
121
122
  emit('onLink', item);
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <section v-if="firstQuestionList && firstQuestionList.length && (isFirstPanelOnRight ? true : !firstPanel) && !secondPanel" class="flex flex-col shrink grow max-h-[85svh]">
2
+ <section v-if="firstQuestionList && firstQuestionList.length && (isFirstPanelOnRight ? true : !firstPanel) && !secondPanel" class="flex flex-col shrink grow h-full">
3
3
  <base-form-section v-if="$dataStore.isUnderwriter()" class="mx-[10px]">
4
4
  <base-rounded-select v-model="filterType" class="w-[200px]" :items="filterItems" :label="$appContextStore.t('labels.filter')" hide-details />
5
5
  </base-form-section>
@@ -12,7 +12,7 @@
12
12
  @clicked="handleToggler"
13
13
  />
14
14
  </section>
15
- <v-form ref="vForm" class="grow shrink overflow-y-scroll" @submit="submitForm">
15
+ <v-form ref="vForm" class="grow shrink overflow-y-scroll flex-1" @submit="submitForm">
16
16
  <section
17
17
  v-if="firstQuestionList.filter(i => i.first.definedAnswers === 'N').length"
18
18
  :class="[$styles.blueBgLight, $styles.rounded]"
@@ -161,8 +161,7 @@
161
161
  <section
162
162
  ref="firstPanelSection"
163
163
  v-if="currentQuestion && currentQuestion.second && isFirstPanelOnRight ? false : firstPanel"
164
- class="flex flex-col px-[10px] pb-[14px]"
165
- :class="[$styles.scrollPage]"
164
+ class="flex flex-col px-[10px] pb-[70px] h-full overflow-y-auto"
166
165
  >
167
166
  <v-form
168
167
  v-if="currentQuestion"
@@ -195,10 +194,10 @@
195
194
  <base-panel-input
196
195
  v-else
197
196
  :class="[$styles.textTitle, $styles.greenText]"
198
- :value="question.answerName ? question.answerName : 'Выбрать вариант ответа'"
197
+ :value="question.answerName ? question.answerName : $appContextStore.t('selectAnswerOption')"
199
198
  :readonly="formStore.isDisabled[whichSurvey] || !$dataStore.isTask()"
200
199
  :clearable="false"
201
- :error-messages="isSecondRequired ? (question.answerName ? [] : ['Выбрать вариант ответа']) : []"
200
+ :error-messages="isSecondRequired ? (question.answerName ? [] : [$appContextStore.t('selectAnswerOption')]) : []"
202
201
  @click="openSecondPanel(question)"
203
202
  ></base-panel-input>
204
203
  </base-form-text-section>
@@ -252,10 +251,10 @@
252
251
  <base-panel-input
253
252
  v-else
254
253
  :class="[$styles.greenText]"
255
- :value="question.answerName ? question.answerName : 'Выбрать вариант ответа'"
254
+ :value="question.answerName ? question.answerName : $appContextStore.t('selectAnswerOption')"
256
255
  :readonly="formStore.isDisabled[whichSurvey] || !$dataStore.isTask()"
257
256
  :clearable="false"
258
- :error-messages="isSecondRequired ? (question.answerName ? [] : ['Выбрать вариант ответа']) : []"
257
+ :error-messages="isSecondRequired ? (question.answerName ? [] : [$appContextStore.t('selectAnswerOption')]) : []"
259
258
  @click="openSecondPanel(question)"
260
259
  />
261
260
  </base-form-text-section>
@@ -286,9 +285,9 @@ export default defineComponent({
286
285
  const secondPanel = ref<boolean>(false);
287
286
  const filterType = ref<'Иә/Да' | 'Жоқ/Нет' | null>(null);
288
287
  const filterItems = [
289
- { title: 'Все', value: null },
290
- { title: 'Только «Да»', value: 'Иә/Да' },
291
- { title: 'Только «Нет»', value: 'Жоқ/Нет' },
288
+ { title: appContextStore.t('all'), value: null },
289
+ { title: appContextStore.t('onlyYes'), value: 'Иә/Да' },
290
+ { title: appContextStore.t('onlyNo'), value: 'Жоқ/Нет' },
292
291
  ];
293
292
  const surveyType = ref<'health' | 'critical'>('tab' in route.query && route.query.tab === 'criticalBase' ? 'critical' : 'health');
294
293
  const whichSurvey = computed(() =>
@@ -156,18 +156,18 @@ export default defineComponent({
156
156
 
157
157
  const carouselItems = [
158
158
  {
159
- title: 'Все полисы в один клик!',
160
- subtitle: 'Мгновенный доступ к информации о ваших полисах',
159
+ title: appContextStore.t('allPoliciesInOneClick'),
160
+ subtitle: appContextStore.t('instantAccessToYourPoliciesInfo'),
161
161
  img: '/left-side-1.png',
162
162
  },
163
163
  {
164
- title: 'Все полисы в один клик!',
165
- subtitle: 'Мгновенный доступ к информации о ваших полисах',
164
+ title: appContextStore.t('allPoliciesInOneClick'),
165
+ subtitle: appContextStore.t('instantAccessToYourPoliciesInfo'),
166
166
  img: '/left-side-1.png',
167
167
  },
168
168
  {
169
- title: 'Все полисы в один клик!',
170
- subtitle: 'Мгновенный доступ к информации о ваших полисах',
169
+ title: appContextStore.t('allPoliciesInOneClick'),
170
+ subtitle: appContextStore.t('instantAccessToYourPoliciesInfo'),
171
171
  img: '/left-side-1.png',
172
172
  },
173
173
  ];
@@ -415,7 +415,7 @@ export default defineComponent({
415
415
  }
416
416
  const initialPoint = `${props.member.iin!.replaceAll('-', '')}.`;
417
417
  const RESPONSE = ESBDMessage(ESBDResponse, initialPoint);
418
- let errorMessage = RESPONSE !== false ? RESPONSE : 'Что-то произошло не так';
418
+ let errorMessage = RESPONSE !== false ? RESPONSE : appContextStore.t('undefinedError');
419
419
  if (typeof ESBDResponse !== 'object' || ESBDResponse.errorCode !== 0) {
420
420
  appContextStore.isLoading = false;
421
421
  showToaster('error', errorMessage, 5000);
@@ -3,12 +3,31 @@
3
3
  <section v-if="isSupportAttachmentSection" class="w-full px-[10px] pt-[14px]">
4
4
  <base-btn :disabled="documentLoading" :loading="documentLoading" text="Открыть панель вложения для Техподдержки" size="sm" @click="openSupportAttachPanel" />
5
5
  </section>
6
- <base-form-section v-if="isUnderwriterDocuments" title="Загрузить документы для Андеррайтинга" class="mx-[10px] mt-[14px]">
6
+ <base-form-section v-if="isUnderwriterDocuments" :title="$appContextStore.t('uploadDocumentsForUnderwriting')" class="mx-[10px] mt-[14px]">
7
7
  <base-file-input :readonly="isDisabled || documentLoading" @input.prevent="onUnderFiles($event)" @onClear="onClearUnderFiles()" />
8
8
  <base-animation>
9
- <base-btn v-if="underDocumentsList && underDocumentsList.length" :loading="documentLoading" text="Загрузить" size="sm" class="mt-3" @click="uploadUnderFiles" />
9
+ <base-btn
10
+ v-if="underDocumentsList && underDocumentsList.length"
11
+ :loading="documentLoading"
12
+ :text="$appContextStore.t('upload')"
13
+ size="sm"
14
+ class="mt-3"
15
+ @click="uploadUnderFiles"
16
+ />
10
17
  </base-animation>
11
18
  </base-form-section>
19
+ <base-form-section
20
+ v-if="
21
+ $appContextStore.isGons &&
22
+ $dataStore.isInitiator() &&
23
+ formStore.applicationData &&
24
+ (formStore.applicationData.statusCode === 'StartForm' || formStore.applicationData.statusCode === 'EditForm')
25
+ "
26
+ title="Загрузить документ подтверждающий степень родства"
27
+ class="mx-[10px] mt-[14px]"
28
+ >
29
+ <base-file-input :readonly="isDisabled || documentLoading" @input.prevent="uploadAdditionalFile($event, '53')" />
30
+ </base-form-section>
12
31
  <section class="w-full px-[10px] pt-[14px]" v-if="$appContextStore.isPension && formStore.hasRepresentative">
13
32
  <base-content-block :class="[$styles.textSimple]">
14
33
  <div :class="[$styles.whiteBg, $styles.rounded]" class="p-2 h-12 flex items-center relative">
@@ -28,7 +47,10 @@
28
47
  <base-content-block v-if="showContract" :class="[$styles.textSimple]">
29
48
  <h5 class="text-center font-medium mb-4">{{ $appContextStore.t('labels.statements') }}</h5>
30
49
  <div :class="[$styles.whiteBg, $styles.rounded]" class="p-2 h-12 flex items-center relative">
31
- <span class="ml-2">Заявления на {{ processCode === 19 || processCode === 25 ? 'страхование' : 'возврат' }}</span>
50
+ <span class="ml-2">
51
+ <template v-if="currentLocale === 'kz'">{{ processCode === 19 || processCode === 25 ? 'Сақтандыруға' : 'Қайтаруға' }} өтініш беру</template>
52
+ <template v-else>Заявления на {{ processCode === 19 || processCode === 25 ? 'страхование' : 'возврат' }}</template>
53
+ </span>
32
54
  <i
33
55
  class="transition-all cursor-pointer mdi mdi-tray-arrow-down pl-2 mr-3 border-l-[1px] text-xl absolute right-0"
34
56
  :class="[$styles.greenTextHover]"
@@ -45,7 +67,10 @@
45
67
  <base-content-block v-if="showContract" :class="[$styles.textSimple]">
46
68
  <h5 class="text-center font-medium mb-4">{{ $appContextStore.t('labels.contract') }}</h5>
47
69
  <div :class="[$styles.whiteBg, $styles.rounded]" class="p-2 h-12 flex items-center relative">
48
- <span class="ml-2">Договор {{ processCode === 19 || processCode === 25 ? 'страхования' : 'возврата' }}</span>
70
+ <span class="ml-2">
71
+ <template v-if="currentLocale === 'kz'">{{ processCode === 19 || processCode === 25 ? 'Сақтандыру' : 'Қайтару' }} шарты</template>
72
+ <template v-else>Договор {{ processCode === 19 || processCode === 25 ? 'страхования' : 'возврата' }}</template>
73
+ </span>
49
74
  <i
50
75
  class="transition-all cursor-pointer mdi mdi-tray-arrow-down pl-2 mr-3 border-l-[1px] text-xl absolute right-0"
51
76
  :class="[$styles.greenTextHover]"
@@ -137,7 +162,7 @@
137
162
  />
138
163
  <base-file-input
139
164
  v-if="!formStore.signedDocumentList.find(i => i.fileTypeCode === '9' && i.iin === String(member.iin).replaceAll('-', '')) && member.isDisability"
140
- label="Справка об инвалидности"
165
+ :label="$appContextStore.t('disabilityCertificate')"
141
166
  :loading="$appContextStore.isLoading"
142
167
  @input="uploadAdditionalFile($event, '9', member.iin)"
143
168
  />
@@ -252,13 +277,13 @@
252
277
  v-if="currentDocument.fileName && currentDocument.fileName.includes('.') ? currentDocument.fileName.endsWith('.pdf') : true"
253
278
  :disabled="documentLoading"
254
279
  :loading="documentLoading"
255
- text="Открыть"
280
+ :text="$appContextStore.t('buttons.open')"
256
281
  @click="getDoc('view')"
257
282
  />
258
283
  </base-animation>
259
- <base-btn :disabled="documentLoading" :loading="documentLoading" text="Скачать" @click="getDoc('download', $dataStore.isSupport() ? downloadType : undefined)" />
284
+ <base-btn :disabled="documentLoading" :loading="documentLoading" :text="$appContextStore.t('download')" @click="getDoc('download', $dataStore.isSupport() ? downloadType : undefined)" />
260
285
  <base-animation>
261
- <base-btn v-if="canDeleteFiles" :disabled="documentLoading" :loading="documentLoading" text="Удалить" @click="deletionDialog = true" />
286
+ <base-btn v-if="canDeleteFiles" :disabled="documentLoading" :loading="documentLoading" :text="$appContextStore.t('buttons.delete')" @click="deletionDialog = true" />
262
287
  </base-animation>
263
288
  </div>
264
289
  </base-fade-transition>
@@ -310,19 +335,26 @@
310
335
  <base-form-section class="!mt-0">
311
336
  <v-expansion-panels :flat="true">
312
337
  <v-expansion-panel class="digital-doc-info !rounded-[8px]">
313
- <v-expansion-panel-title class="!text-[12px]"> Как получить цифровой документ: </v-expansion-panel-title>
338
+ <v-expansion-panel-title class="!text-[12px]">{{ $appContextStore.t('howToGetDigitalDocument') }}:</v-expansion-panel-title>
314
339
  <v-expansion-panel-text class="text-[12px] text-[#464f60]">
315
- 1. Выберите тип документа.<br /><br />
316
- 2. Через приложение eGov mobile и другие приложения: <br />
317
- Откройте раздел "Цифровые документы". <br />
318
- Выберите нужный документ и откройте доступ. <br />
319
- Введите 6-значный код в поле «Код подтверждения». <br />
320
- Нажмите "Получить документ".<br /><br />
321
- 3. Через SMS: <br />
322
- Нажмите "Отправить код". <br />
323
- Введите полученный SMS-код. <br />
324
- Нажмите "Получить документ".<br /><br />
325
- 4. При ошибке нажмите <a href="javascript:void(0);" class="text-blue-600" @click="memberStore.updateDigitalDocumentsProfile(currentIin)">обновить профиль</a><br />
340
+ 1. {{ $appContextStore.t('selectDocumentType') }} <br /><br />
341
+ 2. {{ $appContextStore.t('viaEGovMobileAndOtherApps') }}: <br />
342
+ {{ $appContextStore.t('openDigitalDocumentsSection') }} <br />
343
+ {{ $appContextStore.t('selectDocumentAndGrantAccess') }} <br />
344
+ {{ $appContextStore.t('enter6DigitCodeInConfirmationField') }} <br />
345
+ {{ $appContextStore.t('clickGetDocument') }} <br /><br />
346
+ 3. {{ $appContextStore.t('viaSms') }}: <br />
347
+ {{ $appContextStore.t('clickSendCode') }} <br />
348
+ {{ $appContextStore.t('enterReceivedSmsCode') }} <br />
349
+ {{ $appContextStore.t('clickGetDocument') }} <br /><br />
350
+ <template v-if="currentLocale === 'kz'">
351
+ 4. Қате жағдайда
352
+ <a href="javascript:void(0);" class="text-blue-600" @click="memberStore.updateDigitalDocumentsProfile(currentIin)">профильді жаңартуды</a> басыңыз<br />
353
+ </template>
354
+ <template v-else>
355
+ 4. При ошибке нажмите <a href="javascript:void(0);" class="text-blue-600" @click="memberStore.updateDigitalDocumentsProfile(currentIin)">обновить профиль</a
356
+ ><br />
357
+ </template>
326
358
  </v-expansion-panel-text>
327
359
  </v-expansion-panel>
328
360
  </v-expansion-panels>
@@ -337,13 +369,13 @@
337
369
  />
338
370
  <base-animation>
339
371
  <span v-if="!documentLoading" class="text-center cursor-pointer" :class="[$styles.mutedText]" @click="getCode"
340
- >Не получили код? <span class="underline underline-offset-2">Отправить код заново</span></span
372
+ >{{ $appContextStore.t('didNotReceiveCode') }} <span class="underline underline-offset-2">{{ $appContextStore.t('resendCode') }}</span></span
341
373
  >
342
374
  </base-animation>
343
375
  </div>
344
376
  </div>
345
- <base-btn :disabled="documentLoading" :loading="documentLoading" :btn="$styles.greenLightBtn" text="Отправить SMS-код" @click="getCode" />
346
- <base-btn :disabled="documentLoading" :loading="documentLoading" text="Получить документ" @click="getDigitalDocument" />
377
+ <base-btn :disabled="documentLoading" :loading="documentLoading" :btn="$styles.greenLightBtn" :text="$appContextStore.t('sendSmsCode')" @click="getCode" />
378
+ <base-btn :disabled="documentLoading" :loading="documentLoading" :text="$appContextStore.t('getDocument')" @click="getDigitalDocument" />
347
379
  </div>
348
380
  </Teleport>
349
381
  <base-dialog
@@ -713,10 +745,10 @@ export default defineComponent({
713
745
  () => {
714
746
  if (document_list.value.length > 1 && unSignedList.value.length) {
715
747
  currentState.action = 'submit';
716
- currentState.text = 'Все документы подписаны';
748
+ currentState.text = appContextStore.t('allDocumentsSigned');
717
749
  } else {
718
750
  currentState.action = 'upload';
719
- currentState.text = 'Сохранить';
751
+ currentState.text = appContextStore.t('buttons.save');
720
752
  }
721
753
  },
722
754
  {
@@ -759,7 +791,7 @@ export default defineComponent({
759
791
 
760
792
  const getCode = async () => {
761
793
  if (!documentType.value) {
762
- showToaster('error', 'Выберите тип документа', 3000);
794
+ showToaster('error', appContextStore.t('selectDocumentType'), 3000);
763
795
  return;
764
796
  }
765
797
  documentLoading.value = true;
@@ -772,11 +804,11 @@ export default defineComponent({
772
804
 
773
805
  const getDigitalDocument = async () => {
774
806
  if (!documentType.value) {
775
- showToaster('error', 'Выберите тип документа', 3000);
807
+ showToaster('error', appContextStore.t('selectDocumentType'), 3000);
776
808
  return;
777
809
  }
778
810
  if (!otpCode.value) {
779
- showToaster('error', 'Введите код подтверждения', 3000);
811
+ showToaster('error', appContextStore.t('enterConfirmationCode'), 3000);
780
812
  return;
781
813
  }
782
814
  documentLoading.value = true;