hl-core 0.0.9-beta.27 → 0.0.9-beta.29
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/components/Complex/MessageBlock.vue +1 -1
- package/components/Complex/Page.vue +1 -1
- package/components/Form/DynamicForm.vue +18 -0
- package/components/Form/ManagerAttachment.vue +51 -12
- package/components/Input/DynamicInput.vue +22 -0
- package/components/Input/FileInput.vue +8 -2
- package/components/Input/SwitchInput.vue +64 -0
- package/components/Input/TextInput.vue +156 -0
- package/components/Layout/Drawer.vue +15 -3
- package/components/Layout/Header.vue +1 -1
- package/components/Layout/SettingsPanel.vue +1 -3
- package/components/Menu/MenuNav.vue +2 -2
- package/components/Pages/Anketa.vue +7 -7
- package/components/Pages/ContragentForm.vue +6 -6
- package/components/Pages/Documents.vue +4 -6
- package/components/Pages/MemberForm.vue +30 -30
- package/components/Pages/ProductAgreement.vue +1 -8
- package/components/Pages/ProductConditions.vue +22 -22
- package/components/Panel/PanelHandler.vue +88 -6
- package/components/Panel/RightPanelCloser.vue +7 -0
- package/composables/classes.ts +101 -108
- package/composables/constants.ts +1 -1
- package/composables/index.ts +66 -0
- package/layouts/default.vue +42 -3
- package/locales/ru.json +56 -5
- package/package.json +1 -1
- package/store/data.store.ts +21 -15
- package/store/extractStore.ts +17 -0
- package/types/form.ts +73 -0
- package/types/index.ts +4 -3
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<v-form class="dynamic-form">
|
|
3
|
+
<base-form-section v-for="(section, sectionIndex) in form.sections" :key="sectionIndex" class="rounded-lg" :title="section.title">
|
|
4
|
+
<base-dynamic-input :fields="section.fields" />
|
|
5
|
+
</base-form-section>
|
|
6
|
+
</v-form>
|
|
7
|
+
</template>
|
|
8
|
+
|
|
9
|
+
<script lang="ts">
|
|
10
|
+
export default defineComponent({
|
|
11
|
+
props: {
|
|
12
|
+
form: {
|
|
13
|
+
type: Object as PropType<DynamicForm>,
|
|
14
|
+
required: true,
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
</script>
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
class="pl-1"
|
|
9
9
|
v-model="formStore.SaleChanellPolicy"
|
|
10
10
|
:value="formStore.SaleChanellPolicy?.nameRu"
|
|
11
|
-
:readonly="
|
|
12
|
-
:clearable="!
|
|
11
|
+
:readonly="isSaleChanellReadonly"
|
|
12
|
+
:clearable="!isSaleChanellReadonly"
|
|
13
13
|
:label="$dataStore.t('form.salesChanell')"
|
|
14
14
|
:rules="$rules.objectRequired"
|
|
15
15
|
append-inner-icon="mdi mdi-chevron-right"
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
class="pl-1"
|
|
20
20
|
v-model="formStore.RegionPolicy"
|
|
21
21
|
:value="formStore.RegionPolicy?.nameRu"
|
|
22
|
-
:readonly="
|
|
23
|
-
:clearable="!
|
|
22
|
+
:readonly="isRegionReadonly"
|
|
23
|
+
:clearable="!isRegionReadonly"
|
|
24
24
|
:label="$dataStore.t('form.Region')"
|
|
25
25
|
:rules="$rules.objectRequired"
|
|
26
26
|
append-inner-icon="mdi mdi-chevron-right"
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
class="pl-1"
|
|
31
31
|
v-model="formStore.ManagerPolicy"
|
|
32
32
|
:value="formStore.ManagerPolicy?.nameRu"
|
|
33
|
-
:readonly="
|
|
34
|
-
:clearable="!
|
|
33
|
+
:readonly="isManagerReadonly"
|
|
34
|
+
:clearable="!isManagerReadonly"
|
|
35
35
|
:label="$dataStore.t('form.manager')"
|
|
36
36
|
:rules="$rules.objectRequired"
|
|
37
37
|
append-inner-icon="mdi mdi-chevron-right"
|
|
@@ -41,15 +41,15 @@
|
|
|
41
41
|
class="pl-1"
|
|
42
42
|
v-model="formStore.AgentData"
|
|
43
43
|
:value="formStore.AgentData?.fullName"
|
|
44
|
-
:readonly="
|
|
45
|
-
:clearable="!
|
|
44
|
+
:readonly="isAgentReadonly"
|
|
45
|
+
:clearable="!isAgentReadonly"
|
|
46
46
|
:label="$dataStore.t('form.agent')"
|
|
47
47
|
:rules="$rules.agentDataRequired"
|
|
48
48
|
append-inner-icon="mdi mdi-chevron-right"
|
|
49
49
|
@append="openPanel('AgentData', $dataStore.t('form.agent'))"
|
|
50
50
|
/>
|
|
51
51
|
</v-form>
|
|
52
|
-
<Teleport v-if="isPanelOpen" to="#panel-actions">
|
|
52
|
+
<Teleport v-if="isPanelOpen" to="#right-panel-actions">
|
|
53
53
|
<div :class="[$styles.scrollPage]" class="flex flex-col items-center">
|
|
54
54
|
<base-rounded-input
|
|
55
55
|
v-model.trim="searchQuery"
|
|
@@ -127,13 +127,29 @@ export default defineComponent({
|
|
|
127
127
|
!dataStore.isInitiator() ||
|
|
128
128
|
(route.params.taskId !== '0' && (!dataStore.isProcessEditable(formStore.applicationData.statusCode) || !dataStore.isTask())),
|
|
129
129
|
);
|
|
130
|
+
const isSaleChanellReadonly = computed(() => {
|
|
131
|
+
if (dataStore.isGons) return isReadonly.value || !dataStore.isServiceManager();
|
|
132
|
+
return isReadonly.value;
|
|
133
|
+
});
|
|
134
|
+
const isRegionReadonly = computed(() => {
|
|
135
|
+
if (dataStore.isGons) return isReadonly.value || !dataStore.isServiceManager();
|
|
136
|
+
return isReadonly.value;
|
|
137
|
+
});
|
|
138
|
+
const isManagerReadonly = computed(() => {
|
|
139
|
+
if (dataStore.isGons) return isReadonly.value || !dataStore.isServiceManager();
|
|
140
|
+
return isReadonly.value;
|
|
141
|
+
});
|
|
142
|
+
const isAgentReadonly = computed(() => {
|
|
143
|
+
if (dataStore.isGons) return isReadonly.value || !dataStore.isAgent();
|
|
144
|
+
return isReadonly.value;
|
|
145
|
+
});
|
|
130
146
|
|
|
131
147
|
const openPanel = async (currentDict: ManagerAttachmentFiels, title: string) => {
|
|
132
148
|
searchQuery.value = '';
|
|
133
149
|
if (dataStore.isTask() && !props.disabled) {
|
|
134
150
|
dataStore.panelAction = null;
|
|
135
|
-
dataStore.
|
|
136
|
-
dataStore.
|
|
151
|
+
dataStore.rightPanel.open = true;
|
|
152
|
+
dataStore.rightPanel.title = title;
|
|
137
153
|
currentDictName.value = currentDict;
|
|
138
154
|
|
|
139
155
|
if (currentDict === 'ManagerPolicy' && formStore.RegionPolicy.ids) {
|
|
@@ -161,7 +177,7 @@ export default defineComponent({
|
|
|
161
177
|
// @ts-ignore
|
|
162
178
|
formStore[currentDictName.value] = answer;
|
|
163
179
|
isPanelOpen.value = false;
|
|
164
|
-
dataStore.
|
|
180
|
+
dataStore.rightPanel.open = false;
|
|
165
181
|
searchQuery.value = '';
|
|
166
182
|
};
|
|
167
183
|
|
|
@@ -187,6 +203,25 @@ export default defineComponent({
|
|
|
187
203
|
},
|
|
188
204
|
);
|
|
189
205
|
|
|
206
|
+
watch(
|
|
207
|
+
() => dataStore.rightPanel.open,
|
|
208
|
+
() => {
|
|
209
|
+
if (dataStore.rightPanel.open === false) {
|
|
210
|
+
isPanelOpen.value = false;
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
{ immediate: true },
|
|
214
|
+
);
|
|
215
|
+
|
|
216
|
+
onBeforeUnmount(() => {
|
|
217
|
+
if (!isReadonly.value) {
|
|
218
|
+
const areValid = !!formStore.SaleChanellPolicy.nameRu && !!formStore.RegionPolicy.nameRu && !!formStore.ManagerPolicy.nameRu && !!formStore.AgentData.fullName;
|
|
219
|
+
if (areValid) {
|
|
220
|
+
dataStore.setINSISWorkData(false);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
|
|
190
225
|
return {
|
|
191
226
|
// State
|
|
192
227
|
formStore,
|
|
@@ -199,6 +234,10 @@ export default defineComponent({
|
|
|
199
234
|
|
|
200
235
|
// Computed
|
|
201
236
|
isReadonly,
|
|
237
|
+
isSaleChanellReadonly,
|
|
238
|
+
isRegionReadonly,
|
|
239
|
+
isManagerReadonly,
|
|
240
|
+
isAgentReadonly,
|
|
202
241
|
|
|
203
242
|
// Functions
|
|
204
243
|
openPanel,
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div v-for="(field, fieldIndex) in fields" :key="fieldIndex">
|
|
3
|
+
<base-text-input
|
|
4
|
+
v-if="field.type === 'text' || field.type === 'number'"
|
|
5
|
+
:control="field"
|
|
6
|
+
class="bg-[#fff]"
|
|
7
|
+
:class="{ 'rounded-t-lg': fieldIndex === 0 || fields[fieldIndex - 1].type !== 'text', 'rounded-b-lg': fieldIndex === fields.length - 1 }"
|
|
8
|
+
/>
|
|
9
|
+
<base-switch-input v-if="field.type === 'switch'" :field="field" />
|
|
10
|
+
</div>
|
|
11
|
+
</template>
|
|
12
|
+
|
|
13
|
+
<script lang="ts">
|
|
14
|
+
export default defineComponent({
|
|
15
|
+
props: {
|
|
16
|
+
fields: {
|
|
17
|
+
type: Object as PropType<InputType[]>,
|
|
18
|
+
required: true,
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
</script>
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
accept=".pdf,.doc,.jpeg,.jpg,.jpg,.xlsx,.xls"
|
|
12
12
|
truncate-length="15"
|
|
13
13
|
clear-icon="mdi mdi-close"
|
|
14
|
-
:label="
|
|
14
|
+
:label="label"
|
|
15
15
|
@click:append-inner="$emit('append-inner', $event)"
|
|
16
16
|
/>
|
|
17
17
|
</template>
|
|
@@ -26,7 +26,13 @@ export default defineComponent({
|
|
|
26
26
|
icon: {
|
|
27
27
|
type: String,
|
|
28
28
|
default: 'mdi-file-document',
|
|
29
|
-
}
|
|
29
|
+
},
|
|
30
|
+
label: {
|
|
31
|
+
type: String,
|
|
32
|
+
default() {
|
|
33
|
+
return useDataStore().t('labels.chooseDoc');
|
|
34
|
+
},
|
|
35
|
+
},
|
|
30
36
|
},
|
|
31
37
|
emits: ['input', 'append-inner'],
|
|
32
38
|
});
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="base-switch-input p-4 bg-white rounded-lg mb-3">
|
|
3
|
+
<v-switch v-model="field.modelValue" v-bind="switchProps" />
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<script lang="ts">
|
|
8
|
+
export default defineComponent({
|
|
9
|
+
name: 'asSwitchInput',
|
|
10
|
+
props: {
|
|
11
|
+
field: {
|
|
12
|
+
type: Object as PropType<SwitchInput>,
|
|
13
|
+
required: true,
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
setup(props) {
|
|
17
|
+
const switchProps = computed(() => {
|
|
18
|
+
return {
|
|
19
|
+
label: props.field.label,
|
|
20
|
+
direction: props.field.direction,
|
|
21
|
+
disabled: props.field.disabled,
|
|
22
|
+
hideDetails: true,
|
|
23
|
+
color: '#009C73',
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
return { switchProps };
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<style>
|
|
32
|
+
.base-switch-input .v-switch label {
|
|
33
|
+
font-size: 14px !important;
|
|
34
|
+
font-weight: 400 !important;
|
|
35
|
+
line-height: 20px !important;
|
|
36
|
+
opacity: 1 !important;
|
|
37
|
+
}
|
|
38
|
+
.base-switch-input .v-switch__track {
|
|
39
|
+
background: white !important;
|
|
40
|
+
border: 1.1px solid #e5e5ea;
|
|
41
|
+
height: 19px !important;
|
|
42
|
+
width: 100px !important;
|
|
43
|
+
border-radius: 16px;
|
|
44
|
+
overflow: hidden;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.base-switch-input .switch-block .v-input--horizontal {
|
|
48
|
+
grid-template-areas: unset !important;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.base-switch-input .v-switch__thumb {
|
|
52
|
+
color: white;
|
|
53
|
+
width: 20px;
|
|
54
|
+
height: 20px;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.base-switch-input .v-selection-control--dirty .v-switch__track {
|
|
58
|
+
background: #2aa65c !important;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.base-switch-input .v-switch .v-selection-control {
|
|
62
|
+
min-height: unset !important;
|
|
63
|
+
}
|
|
64
|
+
</style>
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="base-text-input flex justify-between items-center pr-4 mb-[1px] bg-[#fff]">
|
|
3
|
+
<v-text-field v-model="control.modelValue" v-bind="textFieldProps" v-maska="mask">
|
|
4
|
+
<div v-if="hasSuffix" class="absolute top-[27px] left-[18px] flex items-center justify-center">
|
|
5
|
+
<p class="opacity-0 inline-block mr-[2px]">{{ control.modelValue }}</p>
|
|
6
|
+
<span>{{ suffix }}</span>
|
|
7
|
+
</div>
|
|
8
|
+
</v-text-field>
|
|
9
|
+
<v-icon v-if="control.iconName" :icon="`mdi cursor-pointer ${iconsList[control.iconName]}`" color="#A0B3D8" @click="onClickIcon" />
|
|
10
|
+
<vue-date-picker v-if="control.maska === 'date'" v-model="control.modelValue" v-bind="datePickerProps" @update:modelValue="$emit('update:modelValue', $event)">
|
|
11
|
+
<template #trigger>
|
|
12
|
+
<v-icon icon="mdi mdi-calendar-blank-outline cursor-pointer" color="#a0b3d8" />
|
|
13
|
+
</template>
|
|
14
|
+
</vue-date-picker>
|
|
15
|
+
</div>
|
|
16
|
+
</template>
|
|
17
|
+
|
|
18
|
+
<script lang="ts">
|
|
19
|
+
const iconsList: { [key: string]: string } = {
|
|
20
|
+
arrowRight: 'mdi-chevron-right',
|
|
21
|
+
search: 'mdi-magnify',
|
|
22
|
+
sms: 'mdi-message-text',
|
|
23
|
+
clear: 'mdi-close',
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const suffixList: { [key: string]: string } = {
|
|
27
|
+
kzt: '₸',
|
|
28
|
+
usd: '$',
|
|
29
|
+
percent: '%',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default defineComponent({
|
|
33
|
+
props: {
|
|
34
|
+
control: {
|
|
35
|
+
type: Object as PropType<InputType>,
|
|
36
|
+
required: true,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
setup(props) {
|
|
40
|
+
const mask = computed(() => (props.control.maska ? useMask()[props.control.maska] : ''));
|
|
41
|
+
|
|
42
|
+
const textFieldProps = computed(() => {
|
|
43
|
+
return {
|
|
44
|
+
label: props.control.label,
|
|
45
|
+
placeholder: props.control.placeholder,
|
|
46
|
+
disabled: props.control.disabled,
|
|
47
|
+
maxLength: props.control.maxLength,
|
|
48
|
+
readonly: props.control.readonly || props.control.iconName === 'arrowRight',
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
const datePickerProps = computed(() => {
|
|
53
|
+
return {
|
|
54
|
+
locale: 'ru',
|
|
55
|
+
flow: ['calendar'],
|
|
56
|
+
modelType: 'dd.MM.yyyy',
|
|
57
|
+
enableTimePicker: false,
|
|
58
|
+
altPosition: () => ({ top: 0, left: -275 }),
|
|
59
|
+
clearable: false,
|
|
60
|
+
disabled: props.control.disabled,
|
|
61
|
+
readonly: props.control.readonly,
|
|
62
|
+
selectText: 'Выбрать',
|
|
63
|
+
cancelText: 'Закрыть',
|
|
64
|
+
offset: '-50',
|
|
65
|
+
class: 'max-w-max z-[10]',
|
|
66
|
+
closeOnScroll: true,
|
|
67
|
+
transitions: false,
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const hasSuffix = computed(() => {
|
|
72
|
+
return props.control.suffix && props.control.type === 'number' && props.control.modelValue;
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
const suffix = computed(() => {
|
|
76
|
+
return hasSuffix.value ? suffixList[props.control.suffix!] : '';
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
const onClickIcon = () => {};
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
// State
|
|
83
|
+
datePickerProps,
|
|
84
|
+
textFieldProps,
|
|
85
|
+
hasSuffix,
|
|
86
|
+
mask,
|
|
87
|
+
suffix,
|
|
88
|
+
iconsList,
|
|
89
|
+
|
|
90
|
+
// Functions
|
|
91
|
+
onClickIcon,
|
|
92
|
+
};
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
</script>
|
|
96
|
+
<style>
|
|
97
|
+
.base-text-input .v-field__append-inner i {
|
|
98
|
+
color: #a0b3d8 !important;
|
|
99
|
+
margin-left: 10px;
|
|
100
|
+
margin-right: 4px;
|
|
101
|
+
}
|
|
102
|
+
.base-text-input .v-field__append-inner {
|
|
103
|
+
margin-top: 12px;
|
|
104
|
+
cursor: pointer;
|
|
105
|
+
padding-right: 6px;
|
|
106
|
+
}
|
|
107
|
+
.base-text-input .v-field__outline,
|
|
108
|
+
.base-text-input .v-field__overlay,
|
|
109
|
+
.base-text-input .v-field__loader {
|
|
110
|
+
display: none !important;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.base-text-input .v-input__prepend {
|
|
114
|
+
padding-top: 0;
|
|
115
|
+
display: flex;
|
|
116
|
+
align-items: center;
|
|
117
|
+
}
|
|
118
|
+
.base-text-input .v-field__append-inner {
|
|
119
|
+
display: flex;
|
|
120
|
+
padding: 0;
|
|
121
|
+
align-items: center;
|
|
122
|
+
justify-content: center;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.base-text-input .v-file-input {
|
|
126
|
+
padding: 0px;
|
|
127
|
+
}
|
|
128
|
+
.base-text-input .v-messages,
|
|
129
|
+
.base-text-input .v-messages__message,
|
|
130
|
+
.base-text-input .v-input__details {
|
|
131
|
+
min-height: unset !important;
|
|
132
|
+
}
|
|
133
|
+
.base-text-input .v-messages__message {
|
|
134
|
+
transition: all 0.5s;
|
|
135
|
+
margin-bottom: 10px;
|
|
136
|
+
}
|
|
137
|
+
.base-text-input .v-input__details {
|
|
138
|
+
padding-bottom: 0 !important;
|
|
139
|
+
padding-top: 0 !important;
|
|
140
|
+
}
|
|
141
|
+
.base-text-input .dp__action_buttons button {
|
|
142
|
+
padding: 6px 9px;
|
|
143
|
+
height: unset;
|
|
144
|
+
}
|
|
145
|
+
.base-text-input .dp__action_select {
|
|
146
|
+
background: #a0b3d8;
|
|
147
|
+
color: white;
|
|
148
|
+
}
|
|
149
|
+
.base-text-input .dp__action_select:hover {
|
|
150
|
+
background: #97acd6;
|
|
151
|
+
}
|
|
152
|
+
.base-text-input .dp__active_date,
|
|
153
|
+
.base-text-input .dp__overlay_cell_active {
|
|
154
|
+
background: #a0b3d8;
|
|
155
|
+
}
|
|
156
|
+
</style>
|
|
@@ -2,9 +2,14 @@
|
|
|
2
2
|
<v-navigation-drawer
|
|
3
3
|
v-model="$dataStore[whichPanel].open"
|
|
4
4
|
:temporary="$dataStore[whichPanel].overlay"
|
|
5
|
-
location="
|
|
6
|
-
class="sm:!w-[400px]
|
|
7
|
-
:class="[
|
|
5
|
+
:location="side"
|
|
6
|
+
class="sm:!w-[400px]"
|
|
7
|
+
:class="[
|
|
8
|
+
$dataStore[whichPanel].overlay ? 'lg:!hidden' : '',
|
|
9
|
+
$dataStore[whichPanel].open ? '!w-full lg:!w-1/4' : 'lg:!w-[0px]',
|
|
10
|
+
side === 'left' ? '!left-0 !absolute' : '!right-0',
|
|
11
|
+
side === 'right' && $dataStore[whichPanel].open ? 'lg:!relative' : '',
|
|
12
|
+
]"
|
|
8
13
|
:disable-resize-watcher="true"
|
|
9
14
|
:disable-route-watcher="true"
|
|
10
15
|
>
|
|
@@ -12,6 +17,9 @@
|
|
|
12
17
|
<div v-if="$dataStore.panelAction === null" class="flex flex-col" id="panel-actions">
|
|
13
18
|
<slot></slot>
|
|
14
19
|
</div>
|
|
20
|
+
<div v-if="side === 'right'" class="flex flex-col" id="right-panel-actions">
|
|
21
|
+
<slot></slot>
|
|
22
|
+
</div>
|
|
15
23
|
<base-panel-handler v-else @task="$emit('task', $event)" />
|
|
16
24
|
<slot name="panel"></slot>
|
|
17
25
|
</v-navigation-drawer>
|
|
@@ -29,6 +37,10 @@ export default defineComponent({
|
|
|
29
37
|
type: String as PropType<PanelTypes>,
|
|
30
38
|
default: 'panel',
|
|
31
39
|
},
|
|
40
|
+
side: {
|
|
41
|
+
type: String as PropType<'left' | 'right'>,
|
|
42
|
+
default: 'left',
|
|
43
|
+
},
|
|
32
44
|
},
|
|
33
45
|
emits: ['task'],
|
|
34
46
|
setup(props) {
|
|
@@ -71,13 +71,11 @@ const logoutUser = async () => {
|
|
|
71
71
|
await dataStore.logoutUser();
|
|
72
72
|
};
|
|
73
73
|
|
|
74
|
-
const isProduction = import.meta.env.VITE_MODE === 'production';
|
|
75
|
-
|
|
76
74
|
const hasHistory = computed(() => {
|
|
77
75
|
return !dataStore.isLKA;
|
|
78
76
|
});
|
|
79
77
|
|
|
80
78
|
const openHistory = async () => {
|
|
81
|
-
dataStore.sendToParent(constants.postActions.toStatementHistory, dataStore.isBridge || dataStore.isDSO ? '' : dataStore.product);
|
|
79
|
+
dataStore.sendToParent(constants.postActions.toStatementHistory, dataStore.isBridge || dataStore.isDSO || dataStore.isUU ? '' : dataStore.product);
|
|
82
80
|
};
|
|
83
81
|
</script>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
:has-back="hasBack"
|
|
7
7
|
:back-icon="backIcon"
|
|
8
8
|
:has-more="hasMore"
|
|
9
|
-
:hide-more-on-lg="
|
|
9
|
+
:hide-more-on-lg="false"
|
|
10
10
|
:more-icon="moreIcon"
|
|
11
11
|
@onBack="$emit('onBack')"
|
|
12
12
|
@onMore="$emit('onMore')"
|
|
@@ -78,7 +78,7 @@ export default defineComponent({
|
|
|
78
78
|
},
|
|
79
79
|
moreIcon: {
|
|
80
80
|
type: String,
|
|
81
|
-
default: 'mdi-
|
|
81
|
+
default: 'mdi-dots-vertical',
|
|
82
82
|
},
|
|
83
83
|
},
|
|
84
84
|
emits: ['onLink', 'onBack', 'onMore', 'clicked'],
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
</section>
|
|
115
115
|
<base-btn
|
|
116
116
|
v-if="currentQuestion && currentQuestion.second && currentQuestion.second.length && firstPanel"
|
|
117
|
-
class="!absolute z-10 my-[14px] self-center w-[96%] bottom-
|
|
117
|
+
class="!absolute z-10 my-[14px] self-center w-[96%] bottom-[-40px]"
|
|
118
118
|
:text="$dataStore.t('buttons.save')"
|
|
119
119
|
@click="submitSecondaryForm"
|
|
120
120
|
/>
|
|
@@ -148,7 +148,7 @@
|
|
|
148
148
|
</v-form>
|
|
149
149
|
</section>
|
|
150
150
|
</base-fade-transition>
|
|
151
|
-
<Teleport v-if="secondPanel" to="#panel-actions">
|
|
151
|
+
<Teleport v-if="secondPanel" to="#right-panel-actions">
|
|
152
152
|
<div :class="[$styles.scrollPage]" class="flex flex-col items-center">
|
|
153
153
|
<base-rounded-input v-model="searchQuery" :label="$dataStore.t('labels.search')" class="w-full p-2" :hide-details="true" />
|
|
154
154
|
<div v-if="$dataStore.questionRefs && $dataStore.questionRefs.length && isPanelLoading === false" class="w-full flex flex-col gap-2 p-2">
|
|
@@ -304,8 +304,8 @@ export default defineComponent({
|
|
|
304
304
|
await dataStore.getQuestionRefs(question.id);
|
|
305
305
|
secondPanel.value = true;
|
|
306
306
|
dataStore.panelAction = null;
|
|
307
|
-
dataStore.
|
|
308
|
-
dataStore.
|
|
307
|
+
dataStore.rightPanel.open = true;
|
|
308
|
+
dataStore.rightPanel.title = question.name;
|
|
309
309
|
isPanelLoading.value = false;
|
|
310
310
|
};
|
|
311
311
|
|
|
@@ -316,7 +316,7 @@ export default defineComponent({
|
|
|
316
316
|
}
|
|
317
317
|
secondPanel.value = false;
|
|
318
318
|
dataStore.panelAction = null;
|
|
319
|
-
dataStore.
|
|
319
|
+
dataStore.rightPanel.open = false;
|
|
320
320
|
dataStore.questionRefs = [];
|
|
321
321
|
};
|
|
322
322
|
|
|
@@ -376,9 +376,9 @@ export default defineComponent({
|
|
|
376
376
|
});
|
|
377
377
|
|
|
378
378
|
watch(
|
|
379
|
-
() => dataStore.
|
|
379
|
+
() => dataStore.rightPanel.open,
|
|
380
380
|
() => {
|
|
381
|
-
if (dataStore.
|
|
381
|
+
if (dataStore.rightPanel.open === false) {
|
|
382
382
|
secondPanel.value = false;
|
|
383
383
|
dataStore.panelAction = null;
|
|
384
384
|
}
|
|
@@ -261,7 +261,7 @@
|
|
|
261
261
|
</base-form-section>
|
|
262
262
|
</v-form>
|
|
263
263
|
<base-btn v-if="showSaveButton && !disabled" :loading="isButtonLoading" :text="$dataStore.t('buttons.save')" @click="submitForm" />
|
|
264
|
-
<Teleport v-if="isPanelOpen" to="#panel-actions">
|
|
264
|
+
<Teleport v-if="isPanelOpen" to="#right-panel-actions">
|
|
265
265
|
<div :class="[$styles.scrollPage]" class="relative flex flex-col items-center">
|
|
266
266
|
<i
|
|
267
267
|
v-if="type === 'panel'"
|
|
@@ -344,8 +344,8 @@ export default defineComponent({
|
|
|
344
344
|
isPanelOpen.value = true;
|
|
345
345
|
dataStore.panelAction = null;
|
|
346
346
|
if (props.type === 'default') {
|
|
347
|
-
dataStore.
|
|
348
|
-
dataStore.
|
|
347
|
+
dataStore.rightPanel.open = true;
|
|
348
|
+
dataStore.rightPanel.title = title;
|
|
349
349
|
}
|
|
350
350
|
|
|
351
351
|
let newList = list;
|
|
@@ -363,7 +363,7 @@ export default defineComponent({
|
|
|
363
363
|
|
|
364
364
|
const pickPanelValue = (item: Value) => {
|
|
365
365
|
if (props.type === 'default') {
|
|
366
|
-
dataStore.
|
|
366
|
+
dataStore.rightPanel.open = false;
|
|
367
367
|
}
|
|
368
368
|
showForm.value = true;
|
|
369
369
|
isPanelOpen.value = false;
|
|
@@ -463,9 +463,9 @@ export default defineComponent({
|
|
|
463
463
|
);
|
|
464
464
|
|
|
465
465
|
watch(
|
|
466
|
-
() => dataStore.
|
|
466
|
+
() => dataStore.rightPanel.open,
|
|
467
467
|
() => {
|
|
468
|
-
if (dataStore.
|
|
468
|
+
if (dataStore.rightPanel.open === false) {
|
|
469
469
|
isPanelOpen.value = false;
|
|
470
470
|
dataStore.panelAction = null;
|
|
471
471
|
}
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
</base-content-block>
|
|
26
26
|
</section>
|
|
27
27
|
<base-list-empty v-else />
|
|
28
|
-
<Teleport v-if="$dataStore.panelAction === null" to="#panel-actions">
|
|
28
|
+
<Teleport v-if="$dataStore.panelAction === null" to="#right-panel-actions">
|
|
29
29
|
<base-fade-transition>
|
|
30
30
|
<div :class="[$styles.flexColNav]">
|
|
31
31
|
<base-btn :disabled="documentLoading" :loading="documentLoading" text="Открыть" @click="getFile('view')" />
|
|
@@ -73,10 +73,9 @@ export default defineComponent({
|
|
|
73
73
|
);
|
|
74
74
|
|
|
75
75
|
const openPanel = async (document: DocumentItem) => {
|
|
76
|
-
dataStore.
|
|
77
|
-
dataStore.panel.title = document.fileTypeName!;
|
|
76
|
+
dataStore.rightPanel.title = document.fileTypeName!;
|
|
78
77
|
currentDocument.value = document;
|
|
79
|
-
dataStore.
|
|
78
|
+
dataStore.rightPanel.open = true;
|
|
80
79
|
};
|
|
81
80
|
|
|
82
81
|
const onFileChange = async (event: InputEvent) => {
|
|
@@ -132,8 +131,7 @@ export default defineComponent({
|
|
|
132
131
|
onInit();
|
|
133
132
|
|
|
134
133
|
onUnmounted(() => {
|
|
135
|
-
dataStore.
|
|
136
|
-
dataStore.panelAction = null;
|
|
134
|
+
dataStore.rightPanel.open = false;
|
|
137
135
|
});
|
|
138
136
|
|
|
139
137
|
return {
|