@opengis/cms 0.0.2 → 0.0.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/.gitlab-ci.yml +36 -0
- package/config.example +21 -0
- package/docs/.vitepress/abbr.mjs +26 -0
- package/docs/.vitepress/config.mjs +119 -0
- package/docs/.vitepress/navigation.mjs +82 -0
- package/docs/.vitepress/theme/Layout.vue +17 -0
- package/docs/.vitepress/theme/components/NavigationLinks.vue +102 -0
- package/docs/.vitepress/theme/components/Panzoom.vue +169 -0
- package/docs/.vitepress/theme/index.mjs +15 -0
- package/docs/.vitepress/theme/style.scss +136 -0
- package/docs/abbr.json +4 -0
- package/docs/api/builder/cms.builder.delete.md +65 -0
- package/docs/api/builder/cms.builder.get.md +70 -0
- package/docs/api/builder/cms.builder.list.md +98 -0
- package/docs/api/builder/cms.builder.post.md +72 -0
- package/docs/api/builder/cms.builder.put.md +88 -0
- package/docs/api/category/cms.category.delete.md +60 -0
- package/docs/api/category/cms.category.get.md +61 -0
- package/docs/api/category/cms.category.list.md +77 -0
- package/docs/api/category/cms.category.post.md +62 -0
- package/docs/api/category/cms.category.put.md +78 -0
- package/docs/api/index.md +50 -0
- package/docs/api/manager/cms.manager.delete.md +64 -0
- package/docs/api/manager/cms.manager.get.md +72 -0
- package/docs/api/manager/cms.manager.list.md +96 -0
- package/docs/api/manager/cms.manager.post.md +70 -0
- package/docs/api/manager/cms.manager.put.md +86 -0
- package/docs/api/media/del.md +64 -0
- package/docs/api/media/edit.md +92 -0
- package/docs/api/media/list.md +70 -0
- package/docs/api/media/metadata.md +57 -0
- package/docs/api/media/preview.md +33 -0
- package/docs/api/media/upload.md +84 -0
- package/docs/db/erd.md +173 -0
- package/docs/db/index.md +7 -0
- package/docs/index.md +39 -0
- package/docs/public/logo-dark.svg +24 -0
- package/docs/public/logo-light.svg +24 -0
- package/docs/public/logo-short.svg +15 -0
- package/docs/public/logo.svg +19 -0
- package/docs/readme/index.md +6 -0
- package/docs/src/vs-button.vue +157 -0
- package/docs/vue/basic/button.md +144 -0
- package/docs/vue/index.md +9 -0
- package/index.html +14 -0
- package/package.json +2 -5
- package/server/app.js +25 -0
- package/server/config.js +5 -0
- package/server/index.js +23 -0
- package/server/migrations/media.sql +30 -0
- package/server/plugins/hook.js +91 -0
- package/server/plugins/vite.js +80 -0
- package/server/routes/builder/controllers/cms.builder.delete.js +21 -0
- package/server/routes/builder/controllers/cms.builder.get.js +17 -0
- package/server/routes/builder/controllers/cms.builder.list.js +16 -0
- package/server/routes/builder/controllers/cms.builder.post.js +21 -0
- package/server/routes/builder/controllers/cms.builder.put.js +23 -0
- package/server/routes/builder/index.mjs +22 -0
- package/server/routes/category/controllers/cms.category.delete.js +21 -0
- package/server/routes/category/controllers/cms.category.get.js +17 -0
- package/server/routes/category/controllers/cms.category.list.js +16 -0
- package/server/routes/category/controllers/cms.category.post.js +21 -0
- package/server/routes/category/controllers/cms.category.put.js +23 -0
- package/server/routes/category/index.mjs +22 -0
- package/server/routes/manager/controllers/cms.manager.delete.js +22 -0
- package/server/routes/manager/controllers/cms.manager.get.js +21 -0
- package/server/routes/manager/controllers/cms.manager.list.js +31 -0
- package/server/routes/manager/controllers/cms.manager.post.js +28 -0
- package/server/routes/manager/controllers/cms.manager.put.js +23 -0
- package/server/routes/manager/index.mjs +22 -0
- package/server/routes/media/controllers/delete.js +59 -0
- package/server/routes/media/controllers/edit.js +94 -0
- package/server/routes/media/controllers/list.js +74 -0
- package/server/routes/media/controllers/metadata.js +51 -0
- package/server/routes/media/controllers/preview.js +47 -0
- package/server/routes/media/controllers/upload.js +79 -0
- package/server/routes/media/index.mjs +16 -0
- package/server/routes/root.mjs +15 -0
- package/server/templates/cls/cms.category_type.json +10 -0
- package/server/templates/cls/cms.content_review_status.json +10 -0
- package/server/templates/cls/cms.content_status.json +10 -0
- package/server/templates/cls/cms.content_type.json +10 -0
- package/server/templates/cls/cms.lang.json +10 -0
- package/server/templates/page/login.html +59 -0
- package/server/templates/select/cms.category_id.sql +1 -0
- package/server/templates/select/cms.type_id.sql +1 -0
- package/src/App.vue +4 -0
- package/src/assets/tailwind/tailwind.js +62 -0
- package/src/assets/vue.svg +1 -0
- package/src/components/builder/vs-builder-content.vue +163 -0
- package/src/components/builder/vs-builder-menu.vue +142 -0
- package/src/components/formats/index.js +8 -0
- package/src/components/formats/vs-manager-table-date.vue +29 -0
- package/src/components/formats/vs-manager-table-switch.vue +16 -0
- package/src/components/icons/icon-actions.vue +24 -0
- package/src/components/icons/icon-arrow-left.vue +19 -0
- package/src/components/icons/icon-check.vue +23 -0
- package/src/components/icons/icon-chewron-right.vue +16 -0
- package/src/components/icons/icon-close.vue +22 -0
- package/src/components/icons/icon-edit.vue +22 -0
- package/src/components/icons/icon-folder.vue +18 -0
- package/src/components/icons/icon-folder2.vue +17 -0
- package/src/components/icons/icon-home.vue +16 -0
- package/src/components/icons/icon-image.vue +18 -0
- package/src/components/icons/icon-logo.vue +22 -0
- package/src/components/icons/icon-media.vue +22 -0
- package/src/components/icons/icon-point.vue +11 -0
- package/src/components/icons/icon-search.vue +22 -0
- package/src/components/icons/icon-table.vue +22 -0
- package/src/components/icons/icon-users.vue +18 -0
- package/src/components/icons/icon.plus.vue +18 -0
- package/src/components/manager/children/vs-manager-collection-content.vue +55 -0
- package/src/components/manager/children/vs-manager-collection-item-content.vue +116 -0
- package/src/components/manager/children/vs-manager-single-content.vue +112 -0
- package/src/components/manager/manager-table/vs-manager-colection-table-add.vue +84 -0
- package/src/components/manager/manager-table/vs-manager-collection-table.vue +59 -0
- package/src/components/manager/vs-manager-menu.vue +73 -0
- package/src/components/media/Breadcrumb.vue +73 -0
- package/src/components/shared-components/vs-not-data.vue +213 -0
- package/src/components/vs-main-menu.vue +53 -0
- package/src/helpers/debounce.js +10 -0
- package/src/helpers/translite.js +19 -0
- package/src/main.js +30 -0
- package/src/misc/import-file.js +32 -0
- package/src/pages/vs-builder.vue +22 -0
- package/src/pages/vs-layout.vue +17 -0
- package/src/pages/vs-manager.vue +30 -0
- package/src/pages/vs-media.vue +398 -0
- package/src/router/router.js +9 -0
- package/src/router/routes.config.js +40 -0
- package/src/style.css +0 -0
- package/src/templates/form-columns.js +70 -0
- package/src/templates/form-template.js +22 -0
- package/test/config.js +17 -0
- package/test/files/eye.svg +4 -0
- package/test/helper.js +30 -0
- package/test/routes/builder.test.js +99 -0
- package/test/routes/category.test.js +97 -0
- package/test/routes/manager.test.js +103 -0
- package/test/routes/media.test.js +252 -0
- package/vite.config.js +37 -0
- package/editor/dist/cms.js +0 -5900
- package/editor/dist/cms.umd.cjs +0 -19
- /package/{editor/dist → public}/vite.svg +0 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="w-full">
|
|
3
|
+
<div
|
|
4
|
+
class="p-5 min-h-[500px] flex flex-col justify-center items-center text-center"
|
|
5
|
+
>
|
|
6
|
+
<svg
|
|
7
|
+
class="w-48 mx-auto"
|
|
8
|
+
viewBox="0 0 178 90"
|
|
9
|
+
fill="none"
|
|
10
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
11
|
+
>
|
|
12
|
+
<rect
|
|
13
|
+
x="27"
|
|
14
|
+
y="50.5"
|
|
15
|
+
width="124"
|
|
16
|
+
height="39"
|
|
17
|
+
rx="7.5"
|
|
18
|
+
fill="currentColor"
|
|
19
|
+
class="fill-white dark:fill-neutral-800"
|
|
20
|
+
></rect>
|
|
21
|
+
<rect
|
|
22
|
+
x="27"
|
|
23
|
+
y="50.5"
|
|
24
|
+
width="124"
|
|
25
|
+
height="39"
|
|
26
|
+
rx="7.5"
|
|
27
|
+
stroke="currentColor"
|
|
28
|
+
class="stroke-gray-50 dark:stroke-neutral-700/10"
|
|
29
|
+
></rect>
|
|
30
|
+
<rect
|
|
31
|
+
x="34.5"
|
|
32
|
+
y="58"
|
|
33
|
+
width="24"
|
|
34
|
+
height="24"
|
|
35
|
+
rx="4"
|
|
36
|
+
fill="currentColor"
|
|
37
|
+
class="fill-gray-50 dark:fill-neutral-700/30"
|
|
38
|
+
></rect>
|
|
39
|
+
<rect
|
|
40
|
+
x="66.5"
|
|
41
|
+
y="61"
|
|
42
|
+
width="60"
|
|
43
|
+
height="6"
|
|
44
|
+
rx="3"
|
|
45
|
+
fill="currentColor"
|
|
46
|
+
class="fill-gray-50 dark:fill-neutral-700/30"
|
|
47
|
+
></rect>
|
|
48
|
+
<rect
|
|
49
|
+
x="66.5"
|
|
50
|
+
y="73"
|
|
51
|
+
width="77"
|
|
52
|
+
height="6"
|
|
53
|
+
rx="3"
|
|
54
|
+
fill="currentColor"
|
|
55
|
+
class="fill-gray-50 dark:fill-neutral-700/30"
|
|
56
|
+
></rect>
|
|
57
|
+
<rect
|
|
58
|
+
x="19.5"
|
|
59
|
+
y="28.5"
|
|
60
|
+
width="139"
|
|
61
|
+
height="39"
|
|
62
|
+
rx="7.5"
|
|
63
|
+
fill="currentColor"
|
|
64
|
+
class="fill-white dark:fill-neutral-800"
|
|
65
|
+
></rect>
|
|
66
|
+
<rect
|
|
67
|
+
x="19.5"
|
|
68
|
+
y="28.5"
|
|
69
|
+
width="139"
|
|
70
|
+
height="39"
|
|
71
|
+
rx="7.5"
|
|
72
|
+
stroke="currentColor"
|
|
73
|
+
class="stroke-gray-100 dark:stroke-neutral-700/30"
|
|
74
|
+
></rect>
|
|
75
|
+
<rect
|
|
76
|
+
x="27"
|
|
77
|
+
y="36"
|
|
78
|
+
width="24"
|
|
79
|
+
height="24"
|
|
80
|
+
rx="4"
|
|
81
|
+
fill="currentColor"
|
|
82
|
+
class="fill-gray-100 dark:fill-neutral-700/70"
|
|
83
|
+
></rect>
|
|
84
|
+
<rect
|
|
85
|
+
x="59"
|
|
86
|
+
y="39"
|
|
87
|
+
width="60"
|
|
88
|
+
height="6"
|
|
89
|
+
rx="3"
|
|
90
|
+
fill="currentColor"
|
|
91
|
+
class="fill-gray-100 dark:fill-neutral-700/70"
|
|
92
|
+
></rect>
|
|
93
|
+
<rect
|
|
94
|
+
x="59"
|
|
95
|
+
y="51"
|
|
96
|
+
width="92"
|
|
97
|
+
height="6"
|
|
98
|
+
rx="3"
|
|
99
|
+
fill="currentColor"
|
|
100
|
+
class="fill-gray-100 dark:fill-neutral-700/70"
|
|
101
|
+
></rect>
|
|
102
|
+
<g filter="url(#filter1)">
|
|
103
|
+
<rect
|
|
104
|
+
x="12"
|
|
105
|
+
y="6"
|
|
106
|
+
width="154"
|
|
107
|
+
height="40"
|
|
108
|
+
rx="8"
|
|
109
|
+
fill="currentColor"
|
|
110
|
+
class="fill-white dark:fill-neutral-800"
|
|
111
|
+
shape-rendering="crispEdges"
|
|
112
|
+
></rect>
|
|
113
|
+
<rect
|
|
114
|
+
x="12.5"
|
|
115
|
+
y="6.5"
|
|
116
|
+
width="153"
|
|
117
|
+
height="39"
|
|
118
|
+
rx="7.5"
|
|
119
|
+
stroke="currentColor"
|
|
120
|
+
class="stroke-gray-100 dark:stroke-neutral-700/60"
|
|
121
|
+
shape-rendering="crispEdges"
|
|
122
|
+
></rect>
|
|
123
|
+
<rect
|
|
124
|
+
x="20"
|
|
125
|
+
y="14"
|
|
126
|
+
width="24"
|
|
127
|
+
height="24"
|
|
128
|
+
rx="4"
|
|
129
|
+
fill="currentColor"
|
|
130
|
+
class="fill-gray-200 dark:fill-neutral-700"
|
|
131
|
+
></rect>
|
|
132
|
+
<rect
|
|
133
|
+
x="52"
|
|
134
|
+
y="17"
|
|
135
|
+
width="60"
|
|
136
|
+
height="6"
|
|
137
|
+
rx="3"
|
|
138
|
+
fill="currentColor"
|
|
139
|
+
class="fill-gray-200 dark:fill-neutral-700"
|
|
140
|
+
></rect>
|
|
141
|
+
<rect
|
|
142
|
+
x="52"
|
|
143
|
+
y="29"
|
|
144
|
+
width="106"
|
|
145
|
+
height="6"
|
|
146
|
+
rx="3"
|
|
147
|
+
fill="currentColor"
|
|
148
|
+
class="fill-gray-200 dark:fill-neutral-700"
|
|
149
|
+
></rect>
|
|
150
|
+
</g>
|
|
151
|
+
<defs>
|
|
152
|
+
<filter
|
|
153
|
+
id="filter1"
|
|
154
|
+
x="0"
|
|
155
|
+
y="0"
|
|
156
|
+
width="178"
|
|
157
|
+
height="64"
|
|
158
|
+
filterUnits="userSpaceOnUse"
|
|
159
|
+
color-interpolation-filters="sRGB"
|
|
160
|
+
>
|
|
161
|
+
<feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood>
|
|
162
|
+
<feColorMatrix
|
|
163
|
+
in="SourceAlpha"
|
|
164
|
+
type="matrix"
|
|
165
|
+
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
|
166
|
+
result="hardAlpha"
|
|
167
|
+
></feColorMatrix>
|
|
168
|
+
<feOffset dy="6"></feOffset>
|
|
169
|
+
<feGaussianBlur stdDeviation="6"></feGaussianBlur>
|
|
170
|
+
<feComposite in2="hardAlpha" operator="out"></feComposite>
|
|
171
|
+
<feColorMatrix
|
|
172
|
+
type="matrix"
|
|
173
|
+
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0"
|
|
174
|
+
></feColorMatrix>
|
|
175
|
+
<feBlend
|
|
176
|
+
mode="normal"
|
|
177
|
+
in2="BackgroundImageFix"
|
|
178
|
+
result="effect1_dropShadow_1187_14810"
|
|
179
|
+
></feBlend>
|
|
180
|
+
<feBlend
|
|
181
|
+
mode="normal"
|
|
182
|
+
in="SourceGraphic"
|
|
183
|
+
in2="effect1_dropShadow_1187_14810"
|
|
184
|
+
result="shape"
|
|
185
|
+
></feBlend>
|
|
186
|
+
</filter>
|
|
187
|
+
</defs>
|
|
188
|
+
</svg>
|
|
189
|
+
<div class="max-w-sm mx-auto mt-6">
|
|
190
|
+
<p class="font-medium text-gray-800 dark:text-neutral-200">
|
|
191
|
+
{{ title }}
|
|
192
|
+
</p>
|
|
193
|
+
<p class="mt-2 text-sm text-gray-500 dark:text-neutral-500">
|
|
194
|
+
{{ text }}
|
|
195
|
+
</p>
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
</div>
|
|
199
|
+
</template>
|
|
200
|
+
|
|
201
|
+
<script>
|
|
202
|
+
export default {
|
|
203
|
+
props: {
|
|
204
|
+
title: { type: String, default: () => "Дані для відображення відсутні" },
|
|
205
|
+
text: {
|
|
206
|
+
type: String,
|
|
207
|
+
default: () => "Змініть параметри пошуку або спробуйте пізніше",
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
</script>
|
|
212
|
+
|
|
213
|
+
<style lang="scss" scoped></style>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<nav class="w-[60px] border-r">
|
|
3
|
+
<div class="h-[60px] w-[60px] flex items-center justify-center">
|
|
4
|
+
<IconLogo />
|
|
5
|
+
</div>
|
|
6
|
+
<ul class="flex flex-col gap-2 items-center">
|
|
7
|
+
<li v-for="item in navList" :key="item?.name">
|
|
8
|
+
<VsPopover trigger="hover" placement="right">
|
|
9
|
+
<template #reference>
|
|
10
|
+
<router-link
|
|
11
|
+
:to="item?.path"
|
|
12
|
+
:class="[$route?.name?.includes(item?.name) ? 'bg-gray-200' : '']"
|
|
13
|
+
class="h-[40px] w-[40px] rounded-xl hover:bg-gray-200 text-gray-500 flex items-center justify-center duration-300"
|
|
14
|
+
>
|
|
15
|
+
<component :is="item?.icon" heigth="20" width="20" />
|
|
16
|
+
</router-link>
|
|
17
|
+
</template>
|
|
18
|
+
{{ item?.ua }}
|
|
19
|
+
</VsPopover>
|
|
20
|
+
</li>
|
|
21
|
+
</ul>
|
|
22
|
+
</nav>
|
|
23
|
+
</template>
|
|
24
|
+
|
|
25
|
+
<script setup>
|
|
26
|
+
import IconLogo from "./icons/icon-logo.vue";
|
|
27
|
+
import IconEdit from "./icons/icon-edit.vue";
|
|
28
|
+
import IconMedia from "./icons/icon-media.vue";
|
|
29
|
+
import IconTable from "./icons/icon-table.vue";
|
|
30
|
+
|
|
31
|
+
const navList = [
|
|
32
|
+
{
|
|
33
|
+
ua: "Менеджер контенту",
|
|
34
|
+
icon: IconEdit,
|
|
35
|
+
path: "/cms/manager",
|
|
36
|
+
name: "manager",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
ua: "Генератор контенту",
|
|
40
|
+
icon: IconTable,
|
|
41
|
+
path: "/cms/builder",
|
|
42
|
+
name: "builder",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
ua: "Медіатека",
|
|
46
|
+
icon: IconMedia,
|
|
47
|
+
path: "/cms/media",
|
|
48
|
+
name: "media",
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
</script>
|
|
52
|
+
|
|
53
|
+
<style lang="scss" scoped></style>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const translit = (str) => {
|
|
2
|
+
const map = {
|
|
3
|
+
'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'e', 'ж': 'zh',
|
|
4
|
+
'з': 'z', 'и': 'i', 'й': 'y', 'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o',
|
|
5
|
+
'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 'ф': 'f', 'х': 'kh', 'ц': 'ts',
|
|
6
|
+
'ч': 'ch', 'ш': 'sh', 'щ': 'shch', 'ы': 'y', 'э': 'e', 'ю': 'yu', 'я': 'ya',
|
|
7
|
+
'ь': '', 'ъ': '', 'є': 'ye', 'і': 'i', 'ї': 'yi', 'ґ': 'g'
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
return str
|
|
11
|
+
.toLowerCase()
|
|
12
|
+
.split('')
|
|
13
|
+
.map(char => map[char] || char)
|
|
14
|
+
.join('')
|
|
15
|
+
.replace(/[^a-z0-9\s-]/g, '')
|
|
16
|
+
.replace(/\s+/g, '-')
|
|
17
|
+
.replace(/-+/g, '-')
|
|
18
|
+
.trim('-');
|
|
19
|
+
}
|
package/src/main.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { createApp } from 'vue'
|
|
2
|
+
import './style.css'
|
|
3
|
+
import router from './router/router'
|
|
4
|
+
import App from './App.vue'
|
|
5
|
+
import './assets/tailwind/tailwind.js';
|
|
6
|
+
import v3core from '@opengis/v3-core';
|
|
7
|
+
|
|
8
|
+
import '@opengis/v3-core/dist/style.css';
|
|
9
|
+
|
|
10
|
+
window.tailwind = {
|
|
11
|
+
config: {
|
|
12
|
+
darkMode: 'class'
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const app = createApp(App);
|
|
17
|
+
v3core.install(app, createApp);
|
|
18
|
+
|
|
19
|
+
// async function run() {
|
|
20
|
+
// const res = await fetch("/user");
|
|
21
|
+
// const data = await res.json();
|
|
22
|
+
// app.config.globalProperties.$settings = data.settings;
|
|
23
|
+
// app.config.globalProperties.$user = data.user;
|
|
24
|
+
|
|
25
|
+
// }
|
|
26
|
+
// run();
|
|
27
|
+
|
|
28
|
+
window.app = { router };
|
|
29
|
+
app.use(router);
|
|
30
|
+
app.mount('#app');
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import VsBuilderContent from "../components/builder/vs-builder-content.vue";
|
|
2
|
+
import VsManagerCollectionContent from "../components/manager/children/vs-manager-collection-content.vue";
|
|
3
|
+
import VsManagerCollectionItemContent from "../components/manager/children/vs-manager-collection-item-content.vue";
|
|
4
|
+
import VsManagerSingleContent from "../components/manager/children/vs-manager-single-content.vue";
|
|
5
|
+
import VsBuilder from "../pages/vs-builder.vue";
|
|
6
|
+
import VsManager from "../pages/vs-manager.vue";
|
|
7
|
+
import VsMedia from "../pages/vs-media.vue";
|
|
8
|
+
|
|
9
|
+
const components = {
|
|
10
|
+
"vs-builder": VsBuilder,
|
|
11
|
+
"vs-builder-content": VsBuilderContent,
|
|
12
|
+
"vs-manager": VsManager,
|
|
13
|
+
"vs-manager-collection-content": VsManagerCollectionContent,
|
|
14
|
+
"vs-manager-collection-item-content": VsManagerCollectionItemContent,
|
|
15
|
+
"vs-manager-single-content": VsManagerSingleContent,
|
|
16
|
+
"vs-media": VsMedia
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const install = (app) => {
|
|
20
|
+
Object.entries(components)?.forEach(([name, component])=> app.component(name, component))
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const library = {
|
|
24
|
+
install,
|
|
25
|
+
components
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
if (typeof window !== 'undefined') {
|
|
29
|
+
window.v3Cms = library;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export default library;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="w-full bg-[#f6f6f9] h-full h-[calc(100vh-60px)]">
|
|
3
|
+
<div class="flex h-full">
|
|
4
|
+
<VsBuilderMenu v-model:UPDATE="UPDATE" />
|
|
5
|
+
<router-view v-slot="{ Component }">
|
|
6
|
+
<component v-if="Component" :is="Component" :UPDATE />
|
|
7
|
+
<VsNotData
|
|
8
|
+
class="pt-[100px]"
|
|
9
|
+
v-else
|
|
10
|
+
text="Оберіть один з існуючих пунктів меню, або створіть новий"
|
|
11
|
+
/>
|
|
12
|
+
</router-view>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
16
|
+
<script setup>
|
|
17
|
+
import { ref } from "vue";
|
|
18
|
+
import VsBuilderMenu from "../components/builder/vs-builder-menu.vue";
|
|
19
|
+
import VsNotData from "../components/shared-components/vs-not-data.vue";
|
|
20
|
+
|
|
21
|
+
const UPDATE = ref({});
|
|
22
|
+
</script>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="relative h-[100vh] w-[100vw] flex">
|
|
3
|
+
<VsMainMenu/>
|
|
4
|
+
<router-view/>
|
|
5
|
+
</div>
|
|
6
|
+
</template>
|
|
7
|
+
<script>
|
|
8
|
+
import VsMainMenu from '../components/vs-main-menu.vue'
|
|
9
|
+
export default{
|
|
10
|
+
components:{
|
|
11
|
+
VsMainMenu
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
</script>
|
|
15
|
+
<style lang="scss" scoped>
|
|
16
|
+
|
|
17
|
+
</style>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="w-full bg-[#f6f6f9] h-[calc(100vh-60px)]">
|
|
3
|
+
<div class="flex">
|
|
4
|
+
<VsManagerMenu />
|
|
5
|
+
<div class="w-full flex justify-center">
|
|
6
|
+
<div class="p-[20px] w-full max-w-[1440px]">
|
|
7
|
+
<button
|
|
8
|
+
@click="$router.back()"
|
|
9
|
+
class="text-blue-500 flex gap-2 items-center hover:text-blue-700 duration-300"
|
|
10
|
+
>
|
|
11
|
+
<IconArrowLeft :template /> Повернутися назад
|
|
12
|
+
</button>
|
|
13
|
+
<router-view v-slot="{ Component }">
|
|
14
|
+
<component v-if="Component" :is="Component" />
|
|
15
|
+
<VsNotData
|
|
16
|
+
class="pt-[100px]"
|
|
17
|
+
v-else
|
|
18
|
+
text="Оберіть один з існуючих пунктів меню, або створіть новий"
|
|
19
|
+
/>
|
|
20
|
+
</router-view>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
</template>
|
|
26
|
+
<script setup>
|
|
27
|
+
import VsManagerMenu from "../components/manager/vs-manager-menu.vue";
|
|
28
|
+
import VsNotData from "../components/shared-components/vs-not-data.vue";
|
|
29
|
+
import IconArrowLeft from "../components/icons/icon-arrow-left.vue";
|
|
30
|
+
</script>
|