shared-ritm 1.2.69 → 1.2.71

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.
@@ -1,11 +1,16 @@
1
1
  import ApiService from '@/api/settings/ApiService';
2
2
  import { ResponseApi } from '@/api/types/Api_Service';
3
- import { Api_Create_Repair_With_Equipments, Api_Equipment_Full_Dto, Api_Repair_Dto, Api_Update_Repair, OptionFilters } from '@/api/types/Api_Repairs';
3
+ import { Api_Create_Repair_With_Equipments, Api_Create_Repair_With_Template, Api_Equipment_Full_Dto, Api_Repair_Dto, Api_Repair_Template, Api_Update_Repair, OptionFilters } from '@/api/types/Api_Repairs';
4
4
  declare class RepairsService extends ApiService {
5
5
  fetchFilters(fullParams: string): Promise<OptionFilters>;
6
6
  fetchRepairs(isQuery: boolean, queries?: string, hasTeams?: boolean | string, teamsFilter?: string, typeFilter?: string): Promise<ResponseApi<Api_Repair_Dto[]>>;
7
+ fetchRepairTemplates({ equipmentId, categoryCode, }: {
8
+ equipmentId?: string;
9
+ categoryCode?: string;
10
+ }): Promise<ResponseApi<Api_Repair_Template[]>>;
7
11
  fetchEquipment(): Promise<ResponseApi<Api_Equipment_Full_Dto[]>>;
8
12
  createRepair(payload: Api_Create_Repair_With_Equipments): Promise<any>;
13
+ createRepairFromTemplate(payload: Api_Create_Repair_With_Template): Promise<any>;
9
14
  startRepair(id: string): Promise<void>;
10
15
  finishRepair(id: string): Promise<any>;
11
16
  finishPreparationProject(id: string): Promise<any>;
@@ -62,19 +62,28 @@ export type Api_Task_Video_Source_Stream = {
62
62
  export type Api_Create_Repair_With_Equipments = {
63
63
  name: string;
64
64
  display_name: string;
65
- description: string;
65
+ description?: string;
66
66
  equipment_id: string;
67
67
  power_output_MWh?: number;
68
68
  cost_per_MWh?: number;
69
- category?: string;
69
+ category: number;
70
+ user_id_list?: string[];
71
+ team_id_list?: string[];
72
+ };
73
+ export type Api_Create_Repair_With_Template = Omit<Api_Create_Repair_With_Equipments, 'category' | 'equipment_id'> & {
74
+ repair_template_id: string;
75
+ plan_start_date: string;
76
+ task_id_list: string[];
70
77
  };
71
78
  export type Api_Update_Repair = {
72
79
  name?: string;
73
80
  display_name?: string;
74
- description: string;
81
+ description?: string;
75
82
  power_output_MWh?: number;
76
83
  cost_per_MWh?: number;
77
- category?: string;
84
+ category?: number;
85
+ user_id_list?: string[];
86
+ team_id_list?: string[];
78
87
  };
79
88
  export type Api_Repair_Dto = {
80
89
  id: string;
@@ -86,3 +95,14 @@ export type Api_Repair_Dto = {
86
95
  projects: Api_Projects[];
87
96
  equipments: Api_Equipment_Full_Dto[];
88
97
  };
98
+ export type Api_Repair_Template = {
99
+ id: string;
100
+ repair_seconds: number;
101
+ equipment: Pick<Api_Equipment_Full_Dto, 'id' | 'name' | 'registration_number'>;
102
+ category: {
103
+ display_name: string;
104
+ name: string;
105
+ code: number;
106
+ };
107
+ task_list: string;
108
+ };
@@ -2,7 +2,9 @@ import '@/shared/styles/general.css';
2
2
  import AppButton from '@/common/app-button/AppButton.vue';
3
3
  import AppCheckbox from '@/common/app-checkbox/AppCheckbox.vue';
4
4
  import AppDatePicker from '@/common/app-date-picker/AppDatePicker.vue';
5
+ import AppDatepicker from '@/common/app-datepicker/AppDatepicker.vue';
5
6
  import AppInput from '@/common/app-input/AppInput.vue';
7
+ import AppInputNew from '@/common/app-input-new/AppInputNew.vue';
6
8
  import AppInputSearch from '@/common/app-input-search/AppInputSearch.vue';
7
9
  import AppLayout from '@/common/app-layout/AppLayout.vue';
8
10
  import AppLayoutHeader from '@/common/app-layout/components/AppLayoutHeader.vue';
@@ -35,7 +37,7 @@ import usePhotoService from '@/api/services/PhotoService';
35
37
  import useInstrumentsService from '@/api/services/InstrumentsService';
36
38
  import useControlsService from '@/api/services/ControlsService';
37
39
  import useSearchService from '@/api/services/SearchService';
38
- export { AppButton, AppCheckbox, AppDatePicker, AppInput, AppInputSearch, AppLayout, AppLayoutHeader, AppLayoutPage, AppLoader, AppSelect, AppSheet, AppSidebar, AppToggle, AppWrapper, AppConfirmDialog, AppDropdown, AppTablePagination, AppTableSearch, AppTableModal, AppTable, AppTableLayout, AppModalSelect, };
40
+ export { AppButton, AppCheckbox, AppDatepicker, AppDatePicker, AppInput, AppInputNew, AppInputSearch, AppLayout, AppLayoutHeader, AppLayoutPage, AppLoader, AppSelect, AppSheet, AppSidebar, AppToggle, AppWrapper, AppConfirmDialog, AppDropdown, AppTablePagination, AppTableSearch, AppTableModal, AppTable, AppTableLayout, AppModalSelect, };
39
41
  export { ApiService, useAuthService, useGanttService, useMetricsService, useProjectsService, useRepairsService, useTasksService, useFileService, useControlsService, useVideoService, useUserService, usePhotoService, useInstrumentsService, useSearchService, };
40
42
  export { useBaseTable } from './common/app-table/controllers/useBaseTable';
41
43
  export { useTableModel } from './common/app-table/controllers/useTableModel';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shared-ritm",
3
- "version": "1.2.69",
3
+ "version": "1.2.71",
4
4
  "private": false,
5
5
  "files": [
6
6
  "dist",
@@ -2,8 +2,10 @@ import ApiService from '@/api/settings/ApiService'
2
2
  import { ResponseApi } from '@/api/types/Api_Service'
3
3
  import {
4
4
  Api_Create_Repair_With_Equipments,
5
+ Api_Create_Repair_With_Template,
5
6
  Api_Equipment_Full_Dto,
6
7
  Api_Repair_Dto,
8
+ Api_Repair_Template,
7
9
  Api_Update_Repair,
8
10
  OptionFilters,
9
11
  } from '@/api/types/Api_Repairs'
@@ -28,6 +30,18 @@ class RepairsService extends ApiService {
28
30
  )
29
31
  }
30
32
 
33
+ public fetchRepairTemplates({
34
+ equipmentId,
35
+ categoryCode,
36
+ }: {
37
+ equipmentId?: string
38
+ categoryCode?: string
39
+ }): Promise<ResponseApi<Api_Repair_Template[]>> {
40
+ return this.get(
41
+ `repairs/get_repair_template_list?per_page=100000&categoryCodeList[0]=${categoryCode}&equipmentIdList[0]=${equipmentId}`,
42
+ )
43
+ }
44
+
31
45
  public fetchEquipment(): Promise<ResponseApi<Api_Equipment_Full_Dto[]>> {
32
46
  return this.get('repairs/equipment/list?per_page=100000')
33
47
  }
@@ -36,6 +50,10 @@ class RepairsService extends ApiService {
36
50
  return this.post<Api_Create_Repair_With_Equipments, any>('/repairs/equipments', payload)
37
51
  }
38
52
 
53
+ public createRepairFromTemplate(payload: Api_Create_Repair_With_Template) {
54
+ return this.post<Api_Create_Repair_With_Template, any>('/repairs/create_repair_from_repair_template', payload)
55
+ }
56
+
39
57
  public startRepair(id: string): Promise<void> {
40
58
  return this.post<null, void>(`/repairs/${id}/start`, null)
41
59
  }
@@ -65,20 +65,30 @@ export type Api_Task_Video_Source_Stream = {
65
65
  export type Api_Create_Repair_With_Equipments = {
66
66
  name: string
67
67
  display_name: string
68
- description: string
68
+ description?: string
69
69
  equipment_id: string
70
70
  power_output_MWh?: number
71
71
  cost_per_MWh?: number
72
- category?: string
72
+ category: number
73
+ user_id_list?: string[]
74
+ team_id_list?: string[]
75
+ }
76
+
77
+ export type Api_Create_Repair_With_Template = Omit<Api_Create_Repair_With_Equipments, 'category' | 'equipment_id'> & {
78
+ repair_template_id: string
79
+ plan_start_date: string
80
+ task_id_list: string[]
73
81
  }
74
82
 
75
83
  export type Api_Update_Repair = {
76
84
  name?: string
77
85
  display_name?: string
78
- description: string
86
+ description?: string
79
87
  power_output_MWh?: number
80
88
  cost_per_MWh?: number
81
- category?: string
89
+ category?: number
90
+ user_id_list?: string[]
91
+ team_id_list?: string[]
82
92
  }
83
93
 
84
94
  export type Api_Repair_Dto = {
@@ -91,3 +101,15 @@ export type Api_Repair_Dto = {
91
101
  projects: Api_Projects[]
92
102
  equipments: Api_Equipment_Full_Dto[]
93
103
  }
104
+
105
+ export type Api_Repair_Template = {
106
+ id: string
107
+ repair_seconds: number
108
+ equipment: Pick<Api_Equipment_Full_Dto, 'id' | 'name' | 'registration_number'>
109
+ category: {
110
+ display_name: string
111
+ name: string
112
+ code: number
113
+ }
114
+ task_list: string
115
+ }
@@ -0,0 +1,165 @@
1
+ <template>
2
+ <div class="datepicker">
3
+ <app-input-new
4
+ v-model="model"
5
+ readonly
6
+ input-class="cursor-pointer"
7
+ :label="label"
8
+ :required="required"
9
+ :rules="rules"
10
+ :error="error"
11
+ :disable="disabled"
12
+ placeholder="Выберите дату"
13
+ >
14
+ <q-popup-proxy v-if="!disabled" class="datepicker__wrapper" @update:model-value="updateError">
15
+ <q-date
16
+ v-model="model"
17
+ :mask="`DD.MM.YYYY ${timeFormat}`"
18
+ :options="disablePastDates"
19
+ @update:model-value="error = false"
20
+ />
21
+ <q-time
22
+ v-if="time"
23
+ v-model="model"
24
+ :mask="`DD.MM.YYYY ${timeFormat}`"
25
+ format24h
26
+ :hour-options="hourOptions()"
27
+ :minute-options="minuteOptions()"
28
+ />
29
+ </q-popup-proxy>
30
+ <template #append>
31
+ <q-icon name="event" class="cursor-pointer"></q-icon>
32
+ </template>
33
+ </app-input-new>
34
+ </div>
35
+ </template>
36
+
37
+ <script setup lang="ts">
38
+ import AppInputNew from '@/common/app-input-new/AppInputNew.vue'
39
+ import { ref, withDefaults, defineEmits, defineProps, defineModel } from 'vue'
40
+
41
+ interface Props {
42
+ label: string
43
+ modelValue?: string
44
+ rules?: ((val?: string | number | null) => boolean | string)[]
45
+ disableRuleDates?: string
46
+ time?: boolean
47
+ noPastDates?: boolean
48
+ disabled?: boolean
49
+ required?: boolean
50
+ timeFormat?: string
51
+ }
52
+ const props = withDefaults(defineProps<Props>(), {
53
+ timeFormat: 'HH:mm',
54
+ rules: () => [],
55
+ disableRuleDates: undefined,
56
+ modelValue: undefined,
57
+ })
58
+
59
+ defineEmits(['update:modelValue'])
60
+
61
+ const model = defineModel<string | null | undefined>()
62
+
63
+ const error = ref(false)
64
+
65
+ const updateError = (state: boolean) => {
66
+ if (!error.value && !model.value && !state) {
67
+ error.value = true
68
+ }
69
+ }
70
+
71
+ const disablePastDates = (date: string) => {
72
+ if (!props.noPastDates && !props.disableRuleDates) return true
73
+
74
+ const [year, month, day] = date.split('/')
75
+ const currentDate = new Date(Number(year), Number(month) - 1, Number(day))
76
+
77
+ if (props.disableRuleDates) {
78
+ const firstDate = new Date(props.disableRuleDates)
79
+ return currentDate >= firstDate
80
+ }
81
+
82
+ const today = new Date()
83
+ const todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate())
84
+
85
+ return currentDate >= todayDate
86
+ }
87
+
88
+ function getSelectedDate() {
89
+ if (!model.value) return null
90
+
91
+ return model.value.toString().substring(0, 10)
92
+ }
93
+
94
+ function getSelectedHour() {
95
+ if (!model.value) return null
96
+
97
+ const timePart = model.value.toString().split(' ')[1]
98
+ return timePart ? Number(timePart.split(':')[0]) : null
99
+ }
100
+
101
+ function hourOptions(): number[] {
102
+ const today = new Date()
103
+ const selectedDate = getSelectedDate()
104
+ const todayStr = today.toISOString().slice(0, 10)
105
+
106
+ if (selectedDate !== todayStr) {
107
+ return Array.from({ length: 24 }, (_, i) => i)
108
+ }
109
+
110
+ const currentHour = today.getHours()
111
+ return Array.from({ length: 24 - currentHour }, (_, i) => currentHour + i)
112
+ }
113
+
114
+ function minuteOptions(): number[] {
115
+ const today = new Date()
116
+ const selectedDate = getSelectedDate()
117
+ const todayStr = today.toISOString().slice(0, 10)
118
+ const selectedHour = getSelectedHour()
119
+
120
+ if (selectedDate !== todayStr) {
121
+ return Array.from({ length: 60 }, (_, i) => i)
122
+ }
123
+
124
+ if (selectedHour === today.getHours()) {
125
+ const currentMinutes = today.getMinutes()
126
+ return Array.from({ length: 60 - currentMinutes }, (_, i) => currentMinutes + i)
127
+ }
128
+
129
+ return Array.from({ length: 60 }, (_, i) => i)
130
+ }
131
+ </script>
132
+
133
+ <style scoped lang="scss">
134
+ .datepicker {
135
+ :deep(input),
136
+ :deep(.q-field--readonly.q-field--float .q-field__native) {
137
+ cursor: pointer;
138
+ }
139
+
140
+ &__label {
141
+ font-size: 14px;
142
+ font-weight: 700;
143
+ color: #7d8592;
144
+
145
+ .required {
146
+ color: #f65160;
147
+ font-weight: bold;
148
+ }
149
+ }
150
+ }
151
+ </style>
152
+
153
+ <style lang="scss">
154
+ .datepicker {
155
+ &__wrapper {
156
+ display: flex;
157
+
158
+ .q-time,
159
+ .q-date {
160
+ box-shadow: none;
161
+ border-radius: 0;
162
+ }
163
+ }
164
+ }
165
+ </style>
@@ -0,0 +1,152 @@
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="type"
12
+ :rules="rules"
13
+ :placeholder="placeholder"
14
+ :disable="disable"
15
+ :readonly="readonly"
16
+ :class="inputClass"
17
+ :error="error"
18
+ >
19
+ <slot />
20
+ <template #append>
21
+ <slot name="append" />
22
+ <q-icon
23
+ v-if="clearable && String(model)?.length"
24
+ name="close"
25
+ class="cursor-pointer clear-input"
26
+ @click="model = null"
27
+ />
28
+ <q-btn v-if="uuid" flat no-caps label="UUID" size="sm" class="q-ml-sm uuid-btn" @click="model = uuidv4()" />
29
+ <q-icon
30
+ v-if="copyable"
31
+ name="content_copy"
32
+ class="cursor-pointer q-ml-sm copy-icon"
33
+ color="primary"
34
+ :disable="!model"
35
+ @click="copyToClipboard"
36
+ />
37
+ </template>
38
+ </q-input>
39
+ </div>
40
+ </template>
41
+
42
+ <script setup lang="ts">
43
+ import { defineEmits, defineProps, computed } from 'vue'
44
+ import { uuidv4 } from '@/utils/helpers'
45
+ import { notificationSettings } from '@/utils/notification'
46
+ import { QInputProps, useQuasar } from 'quasar'
47
+
48
+ const props = defineProps<
49
+ QInputProps & {
50
+ modelValue?: string | number | null
51
+ label?: string
52
+ placeholder?: string
53
+ rules?: ((val: string | number | null | undefined) => boolean | string)[]
54
+ inputClass?: string
55
+ required?: boolean
56
+ readonly?: boolean
57
+ disable?: boolean
58
+ uuid?: boolean
59
+ clearable?: boolean
60
+ copyable?: boolean
61
+ error?: boolean
62
+ }
63
+ >()
64
+
65
+ const emit = defineEmits<{
66
+ (e: 'update:modelValue', val?: string | number | null): void
67
+ }>()
68
+
69
+ const $q = useQuasar()
70
+
71
+ const model = computed({
72
+ get: () => getValue(props.modelValue),
73
+ set: (newValue?: string | number | null) => emit('update:modelValue', getValue(newValue)),
74
+ })
75
+
76
+ const getValue = (value?: string | number | null) => {
77
+ if (props.type === 'number') return value ? +value : value
78
+
79
+ return value
80
+ }
81
+
82
+ const copyToClipboard = () => {
83
+ if (!model.value && model.value !== 0) return
84
+
85
+ navigator.clipboard.writeText(model.value.toString()).then(() => {
86
+ $q.notify(notificationSettings('success', 'Данные скопированы'))
87
+ })
88
+ }
89
+ </script>
90
+
91
+ <style scoped lang="scss">
92
+ .app-input-new {
93
+ display: flex;
94
+ flex-direction: column;
95
+ margin-bottom: 15px;
96
+
97
+ &__label {
98
+ font-size: 14px;
99
+ font-weight: 700;
100
+ color: #7d8592;
101
+ }
102
+
103
+ .required {
104
+ color: #f65160;
105
+ font-weight: bold;
106
+ }
107
+
108
+ .clear-input {
109
+ color: #d8e0f0;
110
+ }
111
+
112
+ .uuid-btn {
113
+ height: 32px;
114
+ padding: 0 10px;
115
+ border: 1px solid #3f8cff;
116
+ color: #3f8cff;
117
+ font-weight: 700;
118
+ font-size: 14px;
119
+ background: white;
120
+ border-radius: 6px;
121
+
122
+ :deep(.block) {
123
+ line-height: normal;
124
+ }
125
+ }
126
+
127
+ :deep(.q-placeholder) {
128
+ color: #7d8592;
129
+ }
130
+
131
+ :deep(.q-field__control) {
132
+ min-height: 58px;
133
+ border-radius: 8px;
134
+ border: 1px solid #d8e0f0;
135
+ background: #fff;
136
+ box-shadow: 0 1px 2px 0 rgba(184, 200, 224, 0.22);
137
+ }
138
+
139
+ :deep(.q-field--filled .q-field__control:before) {
140
+ background: #fff !important;
141
+ border: none;
142
+ }
143
+
144
+ :deep(.q-field--with-bottom) {
145
+ padding-bottom: 0;
146
+ }
147
+
148
+ :deep(.q-field__bottom) {
149
+ padding: 0;
150
+ }
151
+ }
152
+ </style>
@@ -11,7 +11,7 @@
11
11
  :disable="isDisabled"
12
12
  :multiple="multiple"
13
13
  :popup-content-class="'custom-select-menu'"
14
- :hide-selected="!showChip"
14
+ :hide-selected="!showChip && !simple"
15
15
  :placeholder="placeholder"
16
16
  :loading="loading"
17
17
  :option-value="optionValue || 'value'"
@@ -20,8 +20,9 @@
20
20
  filled
21
21
  map-options
22
22
  stack-label
23
- use-input
24
- use-chips
23
+ :use-input="!selected?.length && typeof selected !== 'number'"
24
+ :use-chips="!simple"
25
+ :hide-bottom-space="hideBottomSpace"
25
26
  input-debounce="100"
26
27
  autocomplete=""
27
28
  :rules="rules"
@@ -44,7 +45,7 @@
44
45
 
45
46
  <template #append>
46
47
  <q-icon
47
- v-if="!isDisabled && selected && selected.length"
48
+ v-if="!isDisabled && selected && (selected.length || selected > 0)"
48
49
  name="close"
49
50
  class="cursor-pointer clear-input"
50
51
  @click.stop="handleClear"
@@ -55,7 +56,7 @@
55
56
  <div class="q-pa-sm">
56
57
  <q-item>
57
58
  <q-item-section class="wrapper-empty-text">
58
- {{ emptyText }}
59
+ {{ emptyText || 'Ничего не найдено' }}
59
60
  <button
60
61
  v-if="allowCreate && internalSearch && internalSearch.trim()"
61
62
  class="add-new-items"
@@ -86,8 +87,8 @@ type Option = Record<string, any>
86
87
  interface AppQSelectProps {
87
88
  modelValue: any
88
89
  options: Option[]
89
- placeholder: string | undefined
90
- emptyText: string
90
+ placeholder?: string | undefined
91
+ emptyText?: string
91
92
  optionLabel?: string
92
93
  optionValue?: string
93
94
  label?: string
@@ -98,6 +99,8 @@ interface AppQSelectProps {
98
99
  allowCreate?: boolean
99
100
  isSearch?: boolean
100
101
  showChip?: boolean
102
+ simple?: boolean
103
+ hideBottomSpace?: boolean
101
104
  chipColor?: string
102
105
  height?: string
103
106
  borderColor?: string
@@ -123,9 +126,10 @@ const selected = computed({
123
126
  })
124
127
 
125
128
  function handleClear() {
126
- selected.value = props.multiple ? [] : null
129
+ const emptyValue = props.multiple ? [] : null
130
+ selected.value = emptyValue
127
131
  lcText.value = ''
128
- emit('update:modelValue', selected.value)
132
+ emit('update:modelValue', emptyValue)
129
133
  emit('clear')
130
134
  }
131
135
 
@@ -231,10 +235,12 @@ function debounce<T>(fn: T, ms) {
231
235
  border-radius: 8px;
232
236
  border: 1px solid #d8e0f0;
233
237
  background: #fff;
234
- box-shadow: 0px 1px 2px 0px rgba(184, 200, 224, 0.22);
238
+ box-shadow: 0 1px 2px 0 rgba(184, 200, 224, 0.22);
235
239
  }
236
- ::v-deep(.q-field--filled.q-field--highlighted .q-field__control:before),
237
- ::v-deep(.q-field--filled .q-field__control:before) {
240
+ :deep(.q-field__control:before) {
241
+ display: none;
242
+ }
243
+ :global(.q-field--filled.q-field--highlighted .q-field__control:before) {
238
244
  background: #fff !important;
239
245
  border: none;
240
246
  }
@@ -1,14 +1,15 @@
1
1
  <template>
2
2
  <div>
3
- <q-toggle v-model="value" />
3
+ <q-toggle v-model="value" :disable="disable" />
4
4
  </div>
5
5
  </template>
6
6
 
7
7
  <script setup lang="ts">
8
- import { computed } from 'vue'
8
+ import { computed, defineProps, defineEmits } from 'vue'
9
9
 
10
10
  interface Props {
11
11
  modelValue: any
12
+ disable?: boolean
12
13
  }
13
14
 
14
15
  const props = defineProps<Props>()
package/src/index.ts CHANGED
@@ -2,7 +2,9 @@ import '@/shared/styles/general.css'
2
2
  import AppButton from '@/common/app-button/AppButton.vue'
3
3
  import AppCheckbox from '@/common/app-checkbox/AppCheckbox.vue'
4
4
  import AppDatePicker from '@/common/app-date-picker/AppDatePicker.vue'
5
+ import AppDatepicker from '@/common/app-datepicker/AppDatepicker.vue'
5
6
  import AppInput from '@/common/app-input/AppInput.vue'
7
+ import AppInputNew from '@/common/app-input-new/AppInputNew.vue'
6
8
  import AppInputSearch from '@/common/app-input-search/AppInputSearch.vue'
7
9
  import AppLayout from '@/common/app-layout/AppLayout.vue'
8
10
  import AppLayoutHeader from '@/common/app-layout/components/AppLayoutHeader.vue'
@@ -40,8 +42,10 @@ import useSearchService from '@/api/services/SearchService'
40
42
  export {
41
43
  AppButton,
42
44
  AppCheckbox,
45
+ AppDatepicker,
43
46
  AppDatePicker,
44
47
  AppInput,
48
+ AppInputNew,
45
49
  AppInputSearch,
46
50
  AppLayout,
47
51
  AppLayoutHeader,