@coopenomics/desktop 2025.7.1 → 2025.7.3
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/package.json +5 -5
- package/src/app/layouts/default.vue +1 -3
- package/src/pages/Cooperative/ListOfDocuments/ListOfDocumentsPage.vue +11 -12
- package/src/shared/ui/BaseDocument/BaseDocument.vue +0 -2
- package/src/shared/ui/CardStyles/index.scss +13 -7
- package/src/shared/ui/MeetCompactCard/ui/MeetCompactCard.vue +7 -0
- package/src/shared/ui/ShadowHtml/ShadowHtml.vue +0 -11
- package/src/shared/ui/UserDataForm/OrganizationDataForm/OrganizationDataForm.vue +188 -90
- package/src/widgets/Desktop/SecondLevelMenuList/SecondLevelMenuList.vue +68 -18
- package/src/widgets/Desktop/WorkspaceMenu/WorkspaceMenu.vue +3 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coopenomics/desktop",
|
|
3
|
-
"version": "2025.7.
|
|
3
|
+
"version": "2025.7.3",
|
|
4
4
|
"description": "A Desktop Project",
|
|
5
5
|
"productName": "Desktop App",
|
|
6
6
|
"author": "Alex Ant <dacom.dark.sun@gmail.com>",
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"start": "node -r ./alias-resolver.js dist/ssr/index.js"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@coopenomics/controller": "2025.7.
|
|
28
|
-
"@coopenomics/sdk": "2025.7.
|
|
27
|
+
"@coopenomics/controller": "2025.7.3",
|
|
28
|
+
"@coopenomics/sdk": "2025.7.3",
|
|
29
29
|
"@dicebear/collection": "^9.0.1",
|
|
30
30
|
"@dicebear/core": "^9.0.1",
|
|
31
31
|
"@fortawesome/fontawesome-svg-core": "^6.5.2",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"@wharfkit/wallet-plugin-privatekey": "^1.1.0",
|
|
51
51
|
"axios": "^1.2.1",
|
|
52
52
|
"compression": "^1.7.4",
|
|
53
|
-
"cooptypes": "2025.7.
|
|
53
|
+
"cooptypes": "2025.7.3",
|
|
54
54
|
"dompurify": "^3.1.7",
|
|
55
55
|
"dotenv": "^16.4.5",
|
|
56
56
|
"email-regex": "^5.0.0",
|
|
@@ -103,5 +103,5 @@
|
|
|
103
103
|
"npm": ">= 6.13.4",
|
|
104
104
|
"yarn": ">= 1.21.1"
|
|
105
105
|
},
|
|
106
|
-
"gitHead": "
|
|
106
|
+
"gitHead": "3bf3c7987336453bf1a5fc0260b8f5b09c230506"
|
|
107
107
|
}
|
|
@@ -16,9 +16,7 @@ q-layout(view='lHh LpR fff')
|
|
|
16
16
|
|
|
17
17
|
q-page-container
|
|
18
18
|
q-page
|
|
19
|
-
.absolute-full.flex.flex-center.
|
|
20
|
-
v-if='desktop.isWorkspaceChanging'
|
|
21
|
-
)
|
|
19
|
+
.absolute-full.flex.flex-center.z-top(v-if='desktop.isWorkspaceChanging')
|
|
22
20
|
Loader
|
|
23
21
|
|
|
24
22
|
router-view(v-else)
|
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
<template lang="pug">
|
|
2
2
|
q-page.padding
|
|
3
3
|
ListOfDocumentsWidget(
|
|
4
|
-
:username=
|
|
5
|
-
:filter=
|
|
6
|
-
:showFilter=
|
|
7
|
-
:initialDocumentType=
|
|
4
|
+
:username='coopname',
|
|
5
|
+
:filter='{}',
|
|
6
|
+
:showFilter='false',
|
|
7
|
+
:initialDocumentType='typeForToggle'
|
|
8
8
|
)
|
|
9
9
|
</template>
|
|
10
10
|
|
|
11
11
|
<script setup lang="ts">
|
|
12
|
-
import { ref, computed } from 'vue'
|
|
13
|
-
import { useSystemStore } from 'src/entities/System/model'
|
|
14
|
-
import { ListOfDocumentsWidget } from 'src/widgets/Cooperative/Documents/ListOfDocuments/ui'
|
|
15
|
-
import type { DocumentType } from 'src/entities/Document/model/types'
|
|
12
|
+
import { ref, computed } from 'vue';
|
|
13
|
+
import { useSystemStore } from 'src/entities/System/model';
|
|
14
|
+
import { ListOfDocumentsWidget } from 'src/widgets/Cooperative/Documents/ListOfDocuments/ui';
|
|
15
|
+
import type { DocumentType } from 'src/entities/Document/model/types';
|
|
16
16
|
|
|
17
17
|
// Получаем системную информацию
|
|
18
|
-
const { info } = useSystemStore()
|
|
19
|
-
const coopname = computed(() => info.coopname)
|
|
18
|
+
const { info } = useSystemStore();
|
|
19
|
+
const coopname = computed(() => info.coopname);
|
|
20
20
|
|
|
21
21
|
// Переменная для отслеживания типа в интерфейсе
|
|
22
|
-
const typeForToggle = ref<DocumentType>('
|
|
23
|
-
|
|
22
|
+
const typeForToggle = ref<DocumentType>('newresolved');
|
|
24
23
|
</script>
|
|
@@ -172,7 +172,6 @@ const shadowStyles = computed(
|
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
th {
|
|
175
|
-
background-color: #f4f4f4;
|
|
176
175
|
width: 30% !important;
|
|
177
176
|
max-width: 30% !important;
|
|
178
177
|
word-break: break-word !important;
|
|
@@ -219,7 +218,6 @@ const shadowStyles = computed(
|
|
|
219
218
|
}
|
|
220
219
|
|
|
221
220
|
th {
|
|
222
|
-
background-color: #f4f4f4;
|
|
223
221
|
width: 30% !important;
|
|
224
222
|
max-width: 30% !important;
|
|
225
223
|
word-break: break-word !important;
|
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
width: 100%;
|
|
5
5
|
border: 1px solid rgba(0, 0, 0, 0.08);
|
|
6
6
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
|
|
7
|
+
background-color: var(--q-surface);
|
|
7
8
|
|
|
8
9
|
.q-dark & {
|
|
9
|
-
border: 1px solid rgba(255, 255, 255, 0.
|
|
10
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
10
11
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
12
|
+
background-color: rgba(255, 255, 255, 0.05);
|
|
11
13
|
}
|
|
12
14
|
}
|
|
13
15
|
|
|
@@ -20,7 +22,7 @@
|
|
|
20
22
|
|
|
21
23
|
.q-dark & {
|
|
22
24
|
background-color: rgba(255, 255, 255, 0.05);
|
|
23
|
-
border: 1px solid rgba(255, 255, 255, 0.
|
|
25
|
+
border: 1px solid rgba(255, 255, 255, 0.15);
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
&:last-child {
|
|
@@ -38,7 +40,7 @@
|
|
|
38
40
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
|
39
41
|
|
|
40
42
|
.q-dark & {
|
|
41
|
-
background-color: rgba(255, 255, 255, 0.
|
|
43
|
+
background-color: rgba(255, 255, 255, 0.1);
|
|
42
44
|
}
|
|
43
45
|
}
|
|
44
46
|
}
|
|
@@ -48,10 +50,12 @@
|
|
|
48
50
|
border-radius: 16px;
|
|
49
51
|
border: 1px solid rgba(0, 0, 0, 0.08);
|
|
50
52
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
|
|
53
|
+
background-color: var(--q-surface);
|
|
51
54
|
|
|
52
55
|
.q-dark & {
|
|
53
|
-
border: 1px solid rgba(255, 255, 255, 0.
|
|
56
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
54
57
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
58
|
+
background-color: rgba(255, 255, 255, 0.05);
|
|
55
59
|
}
|
|
56
60
|
|
|
57
61
|
.page-header {
|
|
@@ -82,10 +86,12 @@
|
|
|
82
86
|
border-radius: 16px;
|
|
83
87
|
border: 1px solid rgba(0, 0, 0, 0.08);
|
|
84
88
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
|
|
89
|
+
background-color: var(--q-surface);
|
|
85
90
|
|
|
86
91
|
.q-dark & {
|
|
87
|
-
border: 1px solid rgba(255, 255, 255, 0.
|
|
92
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
88
93
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
94
|
+
background-color: rgba(255, 255, 255, 0.05);
|
|
89
95
|
}
|
|
90
96
|
|
|
91
97
|
.section-header {
|
|
@@ -114,7 +120,7 @@
|
|
|
114
120
|
|
|
115
121
|
.q-dark & {
|
|
116
122
|
background-color: rgba(255, 255, 255, 0.05);
|
|
117
|
-
border: 1px solid rgba(255, 255, 255, 0.
|
|
123
|
+
border: 1px solid rgba(255, 255, 255, 0.15);
|
|
118
124
|
}
|
|
119
125
|
|
|
120
126
|
&:last-child {
|
|
@@ -127,7 +133,7 @@
|
|
|
127
133
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
|
128
134
|
|
|
129
135
|
.q-dark & {
|
|
130
|
-
background-color: rgba(255, 255, 255, 0.
|
|
136
|
+
background-color: rgba(255, 255, 255, 0.1);
|
|
131
137
|
}
|
|
132
138
|
}
|
|
133
139
|
|
|
@@ -54,12 +54,19 @@ const meetStatus = useMeetStatus(props.meet);
|
|
|
54
54
|
cursor: pointer;
|
|
55
55
|
transition: all 0.3s ease;
|
|
56
56
|
|
|
57
|
+
// Дополнительная стилизация для темной темы
|
|
58
|
+
.q-dark & {
|
|
59
|
+
background-color: rgba(255, 255, 255, 0.07) !important;
|
|
60
|
+
border: 1px solid rgba(255, 255, 255, 0.25) !important;
|
|
61
|
+
}
|
|
62
|
+
|
|
57
63
|
&:hover {
|
|
58
64
|
transform: translateY(-4px);
|
|
59
65
|
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
|
|
60
66
|
|
|
61
67
|
.q-dark & {
|
|
62
68
|
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
|
|
69
|
+
background-color: rgba(255, 255, 255, 0.1) !important;
|
|
63
70
|
}
|
|
64
71
|
|
|
65
72
|
.balance-card {
|
|
@@ -4,23 +4,15 @@ div(ref='shadowHost')
|
|
|
4
4
|
<script setup lang="ts">
|
|
5
5
|
import { onMounted, ref, watch } from 'vue';
|
|
6
6
|
|
|
7
|
-
console.log('ShadowHtml: component script setup starts');
|
|
8
|
-
|
|
9
7
|
const props = defineProps({
|
|
10
8
|
html: { type: String, required: true },
|
|
11
9
|
styles: { type: String, required: false, default: '' },
|
|
12
10
|
});
|
|
13
11
|
|
|
14
|
-
console.log('ShadowHtml initial props:', {
|
|
15
|
-
html_length: props.html.length,
|
|
16
|
-
styles_length: props.styles.length,
|
|
17
|
-
});
|
|
18
|
-
|
|
19
12
|
const shadowHost = ref<HTMLDivElement | null>(null);
|
|
20
13
|
let shadowRoot: ShadowRoot | null = null;
|
|
21
14
|
function renderToShadow() {
|
|
22
15
|
if (shadowRoot) {
|
|
23
|
-
console.log('ShadowHtml: rendering content to shadow root');
|
|
24
16
|
shadowRoot.innerHTML =
|
|
25
17
|
(props.styles ? `<style>${props.styles}</style>` : '') + props.html;
|
|
26
18
|
} else {
|
|
@@ -30,7 +22,6 @@ function renderToShadow() {
|
|
|
30
22
|
}
|
|
31
23
|
}
|
|
32
24
|
onMounted(() => {
|
|
33
|
-
console.log('ShadowHtml: onMounted hook triggered.');
|
|
34
25
|
if (shadowHost.value) {
|
|
35
26
|
if (!shadowRoot) {
|
|
36
27
|
console.log('ShadowHtml: shadowHost found, attaching shadow DOM.');
|
|
@@ -50,6 +41,4 @@ watch(
|
|
|
50
41
|
renderToShadow();
|
|
51
42
|
},
|
|
52
43
|
);
|
|
53
|
-
|
|
54
|
-
console.log('ShadowHtml: component script setup ends');
|
|
55
44
|
</script>
|
|
@@ -1,130 +1,228 @@
|
|
|
1
1
|
<template lang="pug">
|
|
2
|
-
|
|
2
|
+
.q-gutter-sm.q-mt-md(v-if='userData.organization_data')
|
|
3
|
+
q-select.q-mb-md(
|
|
4
|
+
v-model='userData.organization_data.type',
|
|
5
|
+
label='Выберите тип организации',
|
|
6
|
+
standout='bg-teal text-white',
|
|
7
|
+
:options='[ { label: "Потребительский Кооператив", value: Zeus.OrganizationType.COOP }, { label: "Производственный Кооператив", value: Zeus.OrganizationType.PRODCOOP }, { label: "ООО", value: Zeus.OrganizationType.OOO }, ]',
|
|
8
|
+
emit-value,
|
|
9
|
+
map-options
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
q-input(
|
|
13
|
+
v-model='userData.organization_data.short_name',
|
|
14
|
+
standout='bg-teal text-white',
|
|
15
|
+
hint='ПК Ромашка',
|
|
16
|
+
label='Краткое наименование организации',
|
|
17
|
+
:rules='[(val) => notEmpty(val)]',
|
|
18
|
+
autocomplete='off'
|
|
19
|
+
)
|
|
20
|
+
q-input(
|
|
21
|
+
v-model='userData.organization_data.full_name',
|
|
22
|
+
standout='bg-teal text-white',
|
|
23
|
+
hint='Потребительский Кооператив \'Ромашка\'',
|
|
24
|
+
label='Полное наименование организации',
|
|
25
|
+
:rules='[(val) => notEmpty(val)]',
|
|
26
|
+
autocomplete='off'
|
|
27
|
+
)
|
|
28
|
+
q-input(
|
|
29
|
+
v-model='userData.organization_data.represented_by.last_name',
|
|
30
|
+
standout='bg-teal text-white',
|
|
31
|
+
label='Фамилия представителя',
|
|
32
|
+
hint='',
|
|
33
|
+
:rules='[(val) => notEmpty(val), (val) => validatePersonalName(val)]',
|
|
34
|
+
autocomplete='off'
|
|
35
|
+
)
|
|
36
|
+
q-input(
|
|
37
|
+
v-model='userData.organization_data.represented_by.first_name',
|
|
38
|
+
standout='bg-teal text-white',
|
|
39
|
+
label='Имя представителя',
|
|
40
|
+
hint='',
|
|
41
|
+
:rules='[(val) => notEmpty(val), (val) => validatePersonalName(val)]',
|
|
42
|
+
autocomplete='off'
|
|
43
|
+
)
|
|
44
|
+
q-input(
|
|
45
|
+
v-model='userData.organization_data.represented_by.middle_name',
|
|
46
|
+
standout='bg-teal text-white',
|
|
47
|
+
label='Отчество представителя',
|
|
48
|
+
hint='',
|
|
49
|
+
:rules='[(val) => validatePersonalName(val)]',
|
|
50
|
+
autocomplete='off'
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
q-input(
|
|
54
|
+
v-model='userData.organization_data.represented_by.based_on',
|
|
55
|
+
standout='bg-teal text-white',
|
|
56
|
+
label='Представитель действует на основании',
|
|
57
|
+
hint='решения общего собрания №102 от 01.01.2025 г',
|
|
58
|
+
:rules='[(val) => notEmpty(val)]',
|
|
59
|
+
autocomplete='off'
|
|
60
|
+
)
|
|
61
|
+
q-input(
|
|
62
|
+
v-model='userData.organization_data.represented_by.position',
|
|
63
|
+
standout='bg-teal text-white',
|
|
64
|
+
label='Должность представителя',
|
|
65
|
+
hint='председатель совета',
|
|
66
|
+
:rules='[(val) => notEmpty(val)]',
|
|
67
|
+
autocomplete='off'
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
q-input(
|
|
71
|
+
v-model='userData.organization_data.phone',
|
|
72
|
+
standout='bg-teal text-white',
|
|
73
|
+
label='Номер телефона представителя',
|
|
74
|
+
mask='+7 (###) ###-##-##',
|
|
75
|
+
fill-mask,
|
|
76
|
+
hint='',
|
|
77
|
+
:rules='[(val) => notEmpty(val), (val) => notEmptyPhone(val)]',
|
|
78
|
+
autocomplete='off'
|
|
79
|
+
)
|
|
80
|
+
|
|
3
81
|
q-select(
|
|
4
|
-
v-model=
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
q-input(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
q-input(
|
|
24
|
-
|
|
25
|
-
|
|
82
|
+
v-model='userData.organization_data.country',
|
|
83
|
+
standout='bg-teal text-white',
|
|
84
|
+
map-options,
|
|
85
|
+
emit-value,
|
|
86
|
+
option-label='label',
|
|
87
|
+
option-value='value',
|
|
88
|
+
label='Страна',
|
|
89
|
+
:options='[{ label: "Россия", value: "Russia" }]',
|
|
90
|
+
:rules='[(val) => notEmpty(val)]',
|
|
91
|
+
autocomplete='off'
|
|
92
|
+
)
|
|
93
|
+
q-input(
|
|
94
|
+
v-model='userData.organization_data.city',
|
|
95
|
+
standout='bg-teal text-white',
|
|
96
|
+
label='Город',
|
|
97
|
+
hint='',
|
|
98
|
+
:rules='[(val) => notEmpty(val)]',
|
|
99
|
+
autocomplete='off'
|
|
100
|
+
)
|
|
101
|
+
q-input(
|
|
102
|
+
v-model='userData.organization_data.full_address',
|
|
103
|
+
standout='bg-teal text-white',
|
|
104
|
+
hint='',
|
|
105
|
+
label='Юридический адрес регистрации',
|
|
106
|
+
:rules='[(val) => notEmpty(val)]',
|
|
107
|
+
autocomplete='off'
|
|
108
|
+
)
|
|
109
|
+
q-input(
|
|
110
|
+
v-model='userData.organization_data.fact_address',
|
|
111
|
+
standout='bg-teal text-white',
|
|
112
|
+
hint='',
|
|
113
|
+
label='Фактический адрес',
|
|
114
|
+
:rules='[(val) => notEmpty(val)]',
|
|
115
|
+
autocomplete='off'
|
|
116
|
+
)
|
|
26
117
|
template(v-slot:append)
|
|
27
|
-
q-btn(
|
|
118
|
+
q-btn(
|
|
119
|
+
dense,
|
|
120
|
+
size='sm',
|
|
121
|
+
color='teal',
|
|
122
|
+
@click='userData.organization_data.fact_address = userData.organization_data.full_address'
|
|
123
|
+
) совпадает
|
|
28
124
|
|
|
29
125
|
q-input(
|
|
30
|
-
v-model=
|
|
31
|
-
standout=
|
|
32
|
-
mask=
|
|
33
|
-
label=
|
|
34
|
-
hint=
|
|
35
|
-
:rules=
|
|
36
|
-
autocomplete=
|
|
126
|
+
v-model='userData.organization_data.details.inn',
|
|
127
|
+
standout='bg-teal text-white',
|
|
128
|
+
mask='############',
|
|
129
|
+
label='ИНН организации',
|
|
130
|
+
hint='10 или 12 цифр',
|
|
131
|
+
:rules='[(val) => notEmpty(val), (val) => val.length === 10 || val.length === 12 || "ИНН должен содержать 10 или 12 цифр"]',
|
|
132
|
+
autocomplete='off'
|
|
37
133
|
)
|
|
38
134
|
|
|
39
135
|
q-input(
|
|
40
|
-
v-model=
|
|
41
|
-
standout=
|
|
42
|
-
mask=
|
|
43
|
-
label=
|
|
44
|
-
hint=
|
|
45
|
-
:rules=
|
|
46
|
-
autocomplete=
|
|
136
|
+
v-model='userData.organization_data.details.ogrn',
|
|
137
|
+
standout='bg-teal text-white',
|
|
138
|
+
mask='###############',
|
|
139
|
+
label='ОГРН организации',
|
|
140
|
+
hint='13 или 15 цифр',
|
|
141
|
+
:rules='[(val) => notEmpty(val), (val) => val.length === 13 || val.length === 15 || "ОГРН должен содержать 13 или 15 цифр"]',
|
|
142
|
+
autocomplete='off'
|
|
47
143
|
)
|
|
48
144
|
|
|
49
145
|
q-input(
|
|
50
|
-
v-model=
|
|
51
|
-
standout=
|
|
52
|
-
mask=
|
|
53
|
-
label=
|
|
54
|
-
hint=
|
|
55
|
-
:rules=
|
|
56
|
-
autocomplete=
|
|
146
|
+
v-model='userData.organization_data.details.kpp',
|
|
147
|
+
standout='bg-teal text-white',
|
|
148
|
+
mask='#########',
|
|
149
|
+
label='КПП организации',
|
|
150
|
+
hint='9 цифр',
|
|
151
|
+
:rules='[(val) => notEmpty(val), (val) => val.length === 9 || "КПП должен содержать 9 цифр"]',
|
|
152
|
+
autocomplete='off'
|
|
57
153
|
)
|
|
58
154
|
|
|
59
|
-
|
|
60
155
|
q-input(
|
|
61
|
-
v-model=
|
|
62
|
-
standout=
|
|
63
|
-
label=
|
|
64
|
-
hint=
|
|
65
|
-
:rules=
|
|
66
|
-
autocomplete=
|
|
156
|
+
v-model='userData.organization_data.bank_account.bank_name',
|
|
157
|
+
standout='bg-teal text-white',
|
|
158
|
+
label='Наименование банка',
|
|
159
|
+
hint='ПАО Сбербанк',
|
|
160
|
+
:rules='[(val) => notEmpty(val)]',
|
|
161
|
+
autocomplete='off'
|
|
67
162
|
)
|
|
68
163
|
|
|
69
164
|
q-input(
|
|
70
|
-
v-model=
|
|
71
|
-
standout=
|
|
72
|
-
mask=
|
|
73
|
-
label=
|
|
74
|
-
hint=
|
|
75
|
-
:rules=
|
|
76
|
-
autocomplete=
|
|
165
|
+
v-model='userData.organization_data.bank_account.details.corr',
|
|
166
|
+
standout='bg-teal text-white',
|
|
167
|
+
mask='####################',
|
|
168
|
+
label='Корреспондентский счет',
|
|
169
|
+
hint='20 цифр',
|
|
170
|
+
:rules='[(val) => notEmpty(val), (val) => val.length === 20 || "Корреспондентский счет должен содержать 20 цифр"]',
|
|
171
|
+
autocomplete='off'
|
|
77
172
|
)
|
|
78
173
|
q-input(
|
|
79
|
-
v-model=
|
|
80
|
-
standout=
|
|
81
|
-
mask=
|
|
82
|
-
label=
|
|
83
|
-
hint=
|
|
84
|
-
:rules=
|
|
85
|
-
autocomplete=
|
|
174
|
+
v-model='userData.organization_data.bank_account.details.bik',
|
|
175
|
+
standout='bg-teal text-white',
|
|
176
|
+
mask='#########',
|
|
177
|
+
label='БИК',
|
|
178
|
+
hint='9 цифр',
|
|
179
|
+
:rules='[(val) => notEmpty(val), (val) => val.length === 9 || "БИК должен содержать 9 цифр"]',
|
|
180
|
+
autocomplete='off'
|
|
86
181
|
)
|
|
87
182
|
|
|
88
183
|
q-input(
|
|
89
|
-
v-model=
|
|
90
|
-
standout=
|
|
91
|
-
mask=
|
|
92
|
-
label=
|
|
93
|
-
hint=
|
|
94
|
-
:rules=
|
|
95
|
-
autocomplete=
|
|
184
|
+
v-model='userData.organization_data.bank_account.details.kpp',
|
|
185
|
+
standout='bg-teal text-white',
|
|
186
|
+
mask='#########',
|
|
187
|
+
label='КПП (банка)',
|
|
188
|
+
hint='9 цифр',
|
|
189
|
+
:rules='[(val) => notEmpty(val), (val) => val.length === 9 || "КПП должен содержать 9 цифр"]',
|
|
190
|
+
autocomplete='off'
|
|
96
191
|
)
|
|
97
192
|
|
|
98
193
|
q-input(
|
|
99
|
-
v-model=
|
|
100
|
-
standout=
|
|
101
|
-
mask=
|
|
102
|
-
label=
|
|
103
|
-
hint=
|
|
104
|
-
:rules=
|
|
105
|
-
autocomplete=
|
|
194
|
+
v-model='userData.organization_data.bank_account.account_number',
|
|
195
|
+
standout='bg-teal text-white',
|
|
196
|
+
mask='####################',
|
|
197
|
+
label='Номер счета',
|
|
198
|
+
hint='20 цифр',
|
|
199
|
+
:rules='[(val) => notEmpty(val), (val) => val.length === 20 || "Номер счета должен содержать 20 цифр"]',
|
|
200
|
+
autocomplete='off'
|
|
106
201
|
)
|
|
107
202
|
|
|
108
203
|
q-select(
|
|
109
|
-
v-model=
|
|
110
|
-
label=
|
|
111
|
-
standout=
|
|
112
|
-
:options=
|
|
113
|
-
emit-value
|
|
114
|
-
:rules=
|
|
204
|
+
v-model='userData.organization_data.bank_account.currency',
|
|
205
|
+
label='Валюта счёта',
|
|
206
|
+
standout='bg-teal text-white',
|
|
207
|
+
:options='[{ label: "RUB", value: "RUB" }]',
|
|
208
|
+
emit-value,
|
|
209
|
+
:rules='[(val) => notEmpty(val)]',
|
|
115
210
|
map-options
|
|
116
211
|
)
|
|
117
|
-
|
|
118
212
|
</template>
|
|
119
213
|
|
|
120
214
|
<script setup lang="ts">
|
|
121
|
-
import {
|
|
215
|
+
import {
|
|
216
|
+
validatePersonalName,
|
|
217
|
+
notEmpty,
|
|
218
|
+
notEmptyPhone,
|
|
219
|
+
} from 'src/shared/lib/utils';
|
|
122
220
|
|
|
123
221
|
import type { IUserData } from 'src/shared/lib/types/user/IUserData';
|
|
124
222
|
import { ref } from 'vue';
|
|
223
|
+
import { Zeus } from '@coopenomics/sdk';
|
|
125
224
|
|
|
126
225
|
const props = defineProps<{ userData: IUserData }>();
|
|
127
226
|
|
|
128
|
-
const userData = ref<IUserData>(props.userData)
|
|
129
|
-
|
|
227
|
+
const userData = ref<IUserData>(props.userData);
|
|
130
228
|
</script>
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
<template lang="pug">
|
|
2
2
|
div
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
3
|
+
transition(
|
|
4
|
+
mode='out-in',
|
|
5
|
+
enter-active-class='menu-enter-active',
|
|
6
|
+
leave-active-class='menu-leave-active'
|
|
7
|
+
)
|
|
8
|
+
q-list.second-menu(v-if='filteredRoutes.length > 0', :key='menuKey')
|
|
9
|
+
q-item.menu-item(
|
|
10
|
+
v-for='(route, index) in filteredRoutes',
|
|
11
|
+
:key='route.name',
|
|
12
|
+
clickable,
|
|
13
|
+
v-ripple,
|
|
14
|
+
:active='isActive(route)',
|
|
15
|
+
active-class='bg-gradient-dark text-white',
|
|
16
|
+
@click='navigate(route)',
|
|
17
|
+
:style='{ "animation-delay": `${index * 60}ms` }'
|
|
18
|
+
)
|
|
19
|
+
q-item-section
|
|
20
|
+
q-item-label.no-select
|
|
21
|
+
span {{ route.meta.title }}
|
|
21
22
|
</template>
|
|
22
23
|
|
|
23
24
|
<script lang="ts" setup>
|
|
@@ -95,10 +96,59 @@ const navigate = (routeToNavigate: IRoute) => {
|
|
|
95
96
|
params: { coopname: info.coopname },
|
|
96
97
|
});
|
|
97
98
|
};
|
|
99
|
+
|
|
100
|
+
// Ключ для принудительного перерендера при смене маршрутов
|
|
101
|
+
const menuKey = computed(() => {
|
|
102
|
+
return filteredRoutes.value.map((route) => route.name).join('-');
|
|
103
|
+
});
|
|
98
104
|
</script>
|
|
99
105
|
|
|
100
106
|
<style>
|
|
101
107
|
.second-menu .q-item-label {
|
|
102
108
|
font-size: 12px !important;
|
|
103
109
|
}
|
|
110
|
+
|
|
111
|
+
/* Анимации для входа и выхода всего меню */
|
|
112
|
+
.menu-enter-active {
|
|
113
|
+
transition: all 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.menu-leave-active {
|
|
117
|
+
transition: all 0.15s cubic-bezier(0.55, 0.06, 0.68, 0.19);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.menu-enter-active .menu-item {
|
|
121
|
+
animation: slideInDown 0.35s cubic-bezier(0.175, 0.885, 0.32, 1.275) both;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.menu-leave-active .menu-item {
|
|
125
|
+
animation: slideOutUp 0.2s cubic-bezier(0.55, 0.06, 0.68, 0.19) both;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/* Анимации для отдельных элементов */
|
|
129
|
+
@keyframes slideInDown {
|
|
130
|
+
0% {
|
|
131
|
+
transform: translateY(-30px) scale(0.95);
|
|
132
|
+
opacity: 0;
|
|
133
|
+
}
|
|
134
|
+
60% {
|
|
135
|
+
transform: translateY(5px) scale(1.02);
|
|
136
|
+
opacity: 0.8;
|
|
137
|
+
}
|
|
138
|
+
100% {
|
|
139
|
+
transform: translateY(0) scale(1);
|
|
140
|
+
opacity: 1;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
@keyframes slideOutUp {
|
|
145
|
+
0% {
|
|
146
|
+
transform: translateY(0) scale(1);
|
|
147
|
+
opacity: 1;
|
|
148
|
+
}
|
|
149
|
+
100% {
|
|
150
|
+
transform: translateY(-25px) scale(0.9);
|
|
151
|
+
opacity: 0;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
104
154
|
</style>
|