hl-core 0.0.7-beta.2 → 0.0.7-beta.4

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.
@@ -21,7 +21,18 @@ export default function (axios: AxiosInstance) {
21
21
  if (error.response.status === 401) {
22
22
  dataStore.$reset();
23
23
  localStorage.clear();
24
- router.push({ name: 'Auth', query: { error: 401 } });
24
+ if (dataStore.isEFO) {
25
+ router.push({ name: 'Auth', query: { error: 401 } });
26
+ } else {
27
+ dataStore.sendToParent(constants.postActions.Error401, 401);
28
+ }
29
+ }
30
+ if (error.response.status === 500) {
31
+ dataStore.$reset();
32
+ localStorage.clear();
33
+ if (router.currentRoute.value.name !== 'Auth') {
34
+ router.push({ name: '500', query: { stack: error.stack } });
35
+ }
25
36
  }
26
37
  return Promise.reject(error);
27
38
  },
@@ -0,0 +1,47 @@
1
+ <template>
2
+ <button
3
+ type="button"
4
+ class="transition-all"
5
+ @click="$emit('clicked')"
6
+ :disabled="disabled"
7
+ :class="[
8
+ disabled ? 'disabled' : '',
9
+ classes,
10
+ btn,
11
+ $libStyles[`btnH${$capitalize(size)}` as keyof typeof $libStyles],
12
+ ]"
13
+ >
14
+ <i class="mdi" :class="icon"></i>
15
+ </button>
16
+ </template>
17
+
18
+ <script lang="ts">
19
+ export default defineComponent({
20
+ name: 'BaseBtnIcon',
21
+ props: {
22
+ icon: { type: String, default: 'mdi-arrow-right-variant' },
23
+ size: {
24
+ type: String,
25
+ default: 'md',
26
+ },
27
+ classes: {
28
+ type: String,
29
+ default: '',
30
+ },
31
+ disabled: {
32
+ type: Boolean,
33
+ default: false,
34
+ },
35
+ btn: {
36
+ type: String,
37
+ default: new Styles().blueBtn,
38
+ },
39
+ },
40
+ });
41
+ </script>
42
+
43
+ <style scoped>
44
+ .disabled {
45
+ opacity: 0.3;
46
+ }
47
+ </style>
@@ -16,7 +16,23 @@
16
16
  {{ text }}
17
17
  </v-card-text>
18
18
  <v-card-actions class="gap-[16px]">
19
- <slot name="actions"></slot>
19
+ <base-btn
20
+ v-if="actions === 'default'"
21
+ class="!w-fit px-6"
22
+ size="sm"
23
+ :text="$t('confirm.yes')"
24
+ :btn="$libStyles.blueBtn"
25
+ @click="$emit('yes')"
26
+ ></base-btn>
27
+ <base-btn
28
+ v-if="actions === 'default'"
29
+ class="!w-fit px-6"
30
+ size="sm"
31
+ :text="$t('confirm.no')"
32
+ :btn="$libStyles.blueBtn"
33
+ @click="$emit('no')"
34
+ />
35
+ <slot v-if="actions !== 'default'" name="actions"></slot>
20
36
  </v-card-actions>
21
37
  </v-card>
22
38
  </v-dialog>
@@ -41,8 +57,12 @@ export default defineComponent({
41
57
  type: String,
42
58
  default: '',
43
59
  },
60
+ actions: {
61
+ type: String,
62
+ default: 'default',
63
+ },
44
64
  },
45
- emits: ['update:modelValue', 'submitted'],
65
+ emits: ['update:modelValue', 'submitted', 'yes', 'no'],
46
66
  setup(props, { emit }) {
47
67
  const fieldModel = ref(props.modelValue);
48
68
 
@@ -7,26 +7,31 @@
7
7
  :back-icon="backIcon"
8
8
  @onBack="$emit('onBack')"
9
9
  ></base-header>
10
- <transition-group enter-active-class="animate__animated animate__fadeIn">
11
- <slot name="content"></slot>
12
- <section
13
- v-if="items && items.length"
14
- class="px-2 pt-[14px] flex flex-col gap-[10px]"
15
- >
16
- <slot name="start"></slot>
17
- <base-menu-nav-item
18
- v-for="(item, index) of items"
19
- :key="index"
20
- :menu-item="item"
21
- :selected="
22
- selected.title && item.title && selected.title === item.title
23
- "
24
- @click="pickItem(item)"
10
+ <slot key="slot-content" name="content"></slot>
11
+ <section key="main" class="px-2 pt-[14px] flex flex-col gap-[10px]">
12
+ <slot name="start"></slot>
13
+ <transition enter-active-class="animate__animated animate__fadeIn">
14
+ <div
15
+ v-if="$dataStore.menuItems && $dataStore.menuItems.length"
16
+ class="flex flex-col gap-[10px]"
25
17
  >
26
- </base-menu-nav-item>
27
- <slot name="end"></slot>
28
- </section>
29
- </transition-group>
18
+ <div v-for="(item, index) of $dataStore.menuItems" :key="index">
19
+ <base-menu-nav-item
20
+ :menu-item="item"
21
+ :selected="
22
+ !!selected.title &&
23
+ !!item.title &&
24
+ selected.title === item.title
25
+ "
26
+ @click="pickItem(item)"
27
+ >
28
+ </base-menu-nav-item>
29
+ <hr v-if="item.line" class="mt-[10px]" />
30
+ </div>
31
+ </div>
32
+ </transition>
33
+ <slot name="end"></slot>
34
+ </section>
30
35
  </aside>
31
36
  </template>
32
37
 
@@ -39,10 +44,6 @@ export default defineComponent({
39
44
  type: String,
40
45
  default: 'Заголовок',
41
46
  },
42
- items: {
43
- type: Array<MenuItem>,
44
- default: [],
45
- },
46
47
  selected: {
47
48
  type: Object as PropType<MenuItem>,
48
49
  default: new MenuItem(),
@@ -58,9 +59,12 @@ export default defineComponent({
58
59
  },
59
60
  emits: ['update:modelValue', 'onLink', 'onBack', 'clicked'],
60
61
  setup(props, { emit }) {
62
+ const dataStore = useDataStore();
61
63
  const pickItem = (item: MenuItem) => {
62
- emit('update:modelValue', item);
63
- item.link ? emit('onLink', item) : emit('clicked', item);
64
+ if (item.title !== dataStore.menu.selectedItem.title) {
65
+ emit('update:modelValue', item);
66
+ item.link ? emit('onLink', item) : emit('clicked', item);
67
+ }
64
68
  };
65
69
  return { pickItem };
66
70
  },
@@ -9,6 +9,12 @@
9
9
  class="h-[60px] flex items-center hover:bg-[#A0B3D8] hover:!text-white pl-4 cursor-pointer transition-all"
10
10
  >
11
11
  <span>{{ menuItem.title }}</span>
12
+ <v-tooltip
13
+ v-if="menuItem.description"
14
+ activator="parent"
15
+ location="bottom"
16
+ >{{ menuItem.description }}</v-tooltip
17
+ >
12
18
  </div>
13
19
  </template>
14
20
 
@@ -7,15 +7,32 @@ import {
7
7
  export class MenuItem {
8
8
  id: any;
9
9
  title: string | null;
10
- link?: RouteLocationNormalized | RouteLocationNormalizedLoaded;
10
+ link?:
11
+ | RouteLocationNormalized
12
+ | RouteLocationNormalizedLoaded
13
+ | null
14
+ | boolean;
15
+ initial: any;
16
+ line: boolean;
17
+ description?: string;
11
18
  constructor(
12
19
  id: any = null,
13
20
  title: string | null = null,
14
- link?: RouteLocationNormalized | RouteLocationNormalizedLoaded,
21
+ initial: any = null,
22
+ link?:
23
+ | RouteLocationNormalized
24
+ | RouteLocationNormalizedLoaded
25
+ | null
26
+ | boolean,
27
+ line: boolean = false,
28
+ description?: string,
15
29
  ) {
16
30
  this.id = id;
17
31
  this.title = title;
32
+ this.initial = initial;
18
33
  this.link = link;
34
+ this.line = line;
35
+ this.description = description;
19
36
  }
20
37
  }
21
38
 
@@ -720,6 +737,16 @@ export class ProductConditions {
720
737
  }
721
738
 
722
739
  export class DataStoreClass {
740
+ menuItems: MenuItem[];
741
+ menu: {
742
+ title: string;
743
+ hasBack: boolean;
744
+ loading: boolean;
745
+ backIcon: string;
746
+ onBack: any;
747
+ onLink: any;
748
+ selectedItem: MenuItem;
749
+ };
723
750
  historyPageIndex: number;
724
751
  historyPageSize: number;
725
752
  historyTotalItems: number;
@@ -763,6 +790,16 @@ export class DataStoreClass {
763
790
  userGroups: any[];
764
791
  onMainPage: boolean;
765
792
  constructor() {
793
+ this.menuItems = [];
794
+ this.menu = {
795
+ title: '',
796
+ hasBack: false,
797
+ loading: false,
798
+ backIcon: 'mdi-arrow-left',
799
+ onBack: {},
800
+ onLink: {},
801
+ selectedItem: new MenuItem(),
802
+ };
766
803
  this.historyPageIndex = 1;
767
804
  this.historyPageSize = 10;
768
805
  this.historyTotalItems = 0;
@@ -1,9 +1,16 @@
1
1
  export const constants = Object.freeze({
2
- products: { baiterek: 3, halykmycar: 5, lifetrip: 7, bolashak: 8 },
2
+ products: {
3
+ baiterek: 3,
4
+ halykmycar: 5,
5
+ lifetrip: 7,
6
+ bolashak: 8,
7
+ liferenta: 9,
8
+ },
3
9
  BAITEREK_ROUTE: 'baiterek',
4
10
  MYCAR_ROUTE: 'halykmycar',
5
11
  LIFETRIP_ROUTE: 'lifetrip',
6
12
  BOLASHAK_ROUTE: 'bolashak',
13
+ LIFERENTA_ROUTE: 'liferenta',
7
14
  editableStatuses: ['StartForm', 'EditBeneficiaryForm', 'EditForm'],
8
15
  documentsLinkVisibleStatuses: [
9
16
  'DocumentsSignedFrom',
@@ -46,5 +53,6 @@ export const constants = Object.freeze({
46
53
  DOMevent: 'DOMevent',
47
54
  toStatementHistory: 'toStatementHistory',
48
55
  Error401: 'Error401',
56
+ Error500: 'Error500',
49
57
  },
50
58
  });
package/layouts/clear.vue CHANGED
@@ -1,3 +1,3 @@
1
1
  <template>
2
- <slot></slot>
2
+ <div class="h-full w-full"><slot></slot></div>
3
3
  </template>
@@ -1,9 +1,31 @@
1
1
  <template>
2
- <div
3
- :class="[$libStyles.greenBg]"
4
- class="hidden lg:block absolute top-0 h-[200px] w-full"
5
- ></div>
6
2
  <div class="h-full z-[1] lg:mx-[22px] lg:my-[33px] lg:shadow-xl">
7
- <slot></slot>
3
+ <div
4
+ :class="[$libStyles.greenBg]"
5
+ class="hidden z-[-1] lg:block absolute left-0 top-0 h-[200px] w-full"
6
+ ></div>
7
+ <section class="flex h-full" :class="$libStyles.blueBgLight">
8
+ <base-menu-nav
9
+ v-model="$dataStore.menu.selectedItem"
10
+ :selected="$dataStore.menu.selectedItem"
11
+ :title="$dataStore.menu.title as string ?? 'Страховые продукты'"
12
+ :has-back="$dataStore.menu.hasBack as boolean ?? false"
13
+ :back-icon="$dataStore.menu.backIcon as string ?? 'mdi-arrow-left'"
14
+ :class="{
15
+ '!hidden':
16
+ !$display().lgAndUp.value && !!$dataStore.menu.selectedItem.title,
17
+ }"
18
+ @onBack="$dataStore.menu.onBack"
19
+ @onLink="$dataStore.menu.onLink"
20
+ >
21
+ <template #end>
22
+ <base-loader
23
+ v-if="$dataStore.menu.loading as boolean"
24
+ class="self-center m-5 opacity-70"
25
+ ></base-loader>
26
+ </template>
27
+ </base-menu-nav>
28
+ <slot> </slot>
29
+ </section>
8
30
  </div>
9
31
  </template>
@@ -0,0 +1,9 @@
1
+ <template>
2
+ <div class="h-full z-[1] lg:mx-[22px] lg:my-[33px] lg:shadow-xl">
3
+ <div
4
+ :class="[$libStyles.greenBg]"
5
+ class="hidden lg:block absolute z-[-1] left-0 top-0 h-[200px] w-full"
6
+ ></div>
7
+ <slot></slot>
8
+ </div>
9
+ </template>
package/models/index.ts CHANGED
@@ -21,3 +21,23 @@ export type InputTypes =
21
21
  | 'time'
22
22
  | 'url'
23
23
  | 'week';
24
+
25
+ export interface TaskListItem {
26
+ addRegNumber: string | number;
27
+ applicationTaskId: string;
28
+ dateCreated: string;
29
+ historyStatus: string;
30
+ historyStatusTitle: string;
31
+ id: string;
32
+ iin: string;
33
+ insurerIin: string;
34
+ insurerLongName: string;
35
+ isTask: boolean | number;
36
+ longName: string;
37
+ number: string;
38
+ processCode: number;
39
+ processCodeTitle: string;
40
+ status: string;
41
+ userId: string;
42
+ userName: string;
43
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hl-core",
3
- "version": "0.0.7-beta.2",
3
+ "version": "0.0.7-beta.4",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "main": "nuxt.config.ts",
@@ -12,8 +12,9 @@
12
12
  "composables/",
13
13
  "components/",
14
14
  "plugins/",
15
+ "pages/",
15
16
  "nuxt.config.ts",
16
- "tailwind.config.ts",
17
+ "tailwind.config.js",
17
18
  ".prettierrc"
18
19
  ],
19
20
  "scripts": {
@@ -36,6 +37,7 @@
36
37
  "fast-xml-parser": "4.0.12",
37
38
  "jwt-decode": "^3.1.2",
38
39
  "pinia": "^2.0.33",
40
+ "v-idle-3": "^0.3.14",
39
41
  "vue-toastification": "^2.0.0-rc.5",
40
42
  "vuetify": "^3.1.8"
41
43
  }
package/pages/500.vue ADDED
@@ -0,0 +1,57 @@
1
+ <template>
2
+ <base-content
3
+ class="!w-full flex-col justify-center items-center gap-[100px]"
4
+ :class="[$styles.blueBgLight]"
5
+ >
6
+ <img
7
+ src="~/assets/logo-clear.svg"
8
+ class="w-[240px] lg:w-[330px]"
9
+ draggable="false"
10
+ />
11
+ <div class="text-center">
12
+ <h2 :class="[$styles.blackText]" class="text-[26px] leading-5 mb-5">
13
+ Сервис временно не доступен
14
+ </h2>
15
+ <p v-if="errorStack.length" class="mt-4 flex flex-col">
16
+ <span v-for="(error, index) of errorStack" :key="error">
17
+ <i v-if="index !== 0" class="mdi mdi-arrow-right"></i>
18
+ {{ error }}</span
19
+ >
20
+ </p>
21
+ </div>
22
+ <base-btn text="На главную" @click="goBack" class="!w-fit px-14"></base-btn>
23
+ </base-content>
24
+ </template>
25
+
26
+ <script lang="ts">
27
+ export default defineComponent({
28
+ setup() {
29
+ definePageMeta({ layout: 'full' });
30
+
31
+ const dataStore = useDataStore();
32
+ const router = useRouter();
33
+ const route = useRoute();
34
+ const errorStack = ref([] as string[]);
35
+
36
+ onMounted(() => {
37
+ if (route.query && route.query.stack) {
38
+ const queryError = (route.query.stack as string).split(' at ');
39
+ errorStack.value = queryError;
40
+ }
41
+ });
42
+
43
+ const goBack = () => {
44
+ if (dataStore.isEFO) {
45
+ router.push({ name: 'Auth' });
46
+ } else {
47
+ dataStore.sendToParent(constants.postActions.Error500, 500);
48
+ }
49
+ };
50
+
51
+ return {
52
+ errorStack,
53
+ goBack,
54
+ };
55
+ },
56
+ });
57
+ </script>
@@ -1,7 +1,9 @@
1
1
  import { capitalize, getFullNameShorted, reformatIin } from '../composables';
2
2
  import { constants } from '../composables/constants';
3
+ import Vidle from 'v-idle-3';
3
4
 
4
- export default defineNuxtPlugin(() => {
5
+ export default defineNuxtPlugin(nuxtApp => {
6
+ nuxtApp.vueApp.use(Vidle);
5
7
  return {
6
8
  provide: {
7
9
  capitalize: capitalize,
@@ -9,6 +9,7 @@ import { ApiClass } from '@/api';
9
9
  export const useDataStore = defineStore('data', {
10
10
  state: () => ({
11
11
  ...new DataStoreClass(),
12
+ product: null,
12
13
  t: t,
13
14
  rules: rules,
14
15
  toast: Toast,
@@ -32,7 +33,13 @@ export const useDataStore = defineStore('data', {
32
33
  : ToastOptions.timeout,
33
34
  }),
34
35
  }),
36
+ getters: {
37
+ isEFO: state => state.product === 'efo',
38
+ },
35
39
  actions: {
40
+ sendToParent(action, value) {
41
+ window.parent.postMessage({ action: action, value: value }, '*');
42
+ },
36
43
  async getNewAccessToken() {
37
44
  try {
38
45
  const data = {
@@ -854,6 +861,7 @@ export const useDataStore = defineStore('data', {
854
861
  needToReturn = false,
855
862
  key = 'dateCreated',
856
863
  processInstanceId = null,
864
+ byOneProcess = null,
857
865
  ) {
858
866
  if (onlyGet === false) {
859
867
  this.isLoading = true;
@@ -875,6 +883,10 @@ export const useDataStore = defineStore('data', {
875
883
  groupCode: groupCode,
876
884
  processCodes: Object.values(constants.products),
877
885
  };
886
+ if (byOneProcess !== null) {
887
+ delete query.processCodes;
888
+ query.processCode = byOneProcess;
889
+ }
878
890
  const taskList = await this.api.getTaskList(
879
891
  processInstanceId === null
880
892
  ? query
package/store/messages.ts CHANGED
@@ -149,6 +149,7 @@ export const messages = {
149
149
  title: 'Подтверждение',
150
150
  exit: 'Вы действительно хотите выйти?',
151
151
  exitApp: 'Вы действительно хотите выйти? Данные будут очищены.',
152
+ dataWillClear: 'Данные будут очищены',
152
153
  cancel: 'Вы действительно хотите отменить заявку?',
153
154
  clear: 'Вы действительно хотите очистить данные участника?',
154
155
  delete: 'Вы действительно хотите удалить участника?',
@@ -0,0 +1,10 @@
1
+ module.exports = {
2
+ theme: {
3
+ screens: {
4
+ sm: { min: '600px' },
5
+ md: { min: '960px' },
6
+ lg: { min: '1280px' },
7
+ xl: { min: '1920px' },
8
+ },
9
+ },
10
+ };