@ozdao/prometheus-framework 0.2.30 → 0.2.31
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/addMembersQuantity-3505b6f3.mjs +98 -0
- package/dist/addMembersQuantity-fb552ca0.js +97 -0
- package/dist/auth.server.js +6 -9
- package/dist/auth.server.mjs +6 -9
- package/dist/community.server.js +28 -21
- package/dist/community.server.mjs +28 -21
- package/dist/events.server.js +1 -1
- package/dist/events.server.mjs +1 -1
- package/dist/files.server.js +114 -111
- package/dist/files.server.mjs +114 -111
- package/dist/gallery.server.js +3 -3
- package/dist/gallery.server.mjs +3 -3
- package/dist/globals.server.js +1 -1
- package/dist/globals.server.mjs +1 -1
- package/dist/index-a8dffc0c.js +213 -0
- package/dist/index-d769324d.mjs +214 -0
- package/dist/mailing-37c2ba41.mjs +68 -0
- package/dist/mailing-fe16a26a.js +67 -0
- package/dist/main.css +1 -1
- package/dist/middlewares.server.js +1 -1
- package/dist/middlewares.server.mjs +1 -1
- package/dist/organizations.server.js +125 -25
- package/dist/organizations.server.mjs +125 -25
- package/dist/prometheus-framework.cjs.js +30 -29
- package/dist/prometheus-framework.es.js +2478 -2282
- package/dist/reports.server.js +1 -1
- package/dist/reports.server.mjs +1 -1
- package/dist/users.server.js +1 -1
- package/dist/users.server.mjs +1 -1
- package/package.json +4 -2
- package/src/assets/images/logo.svg +7 -7
- package/src/components/Block/Block.vue +77 -0
- package/src/components/Breadcrumbs/Breadcrumbs.vue +2 -2
- package/src/components/Button/Button.vue +32 -227
- package/src/components/Checkbox/Checkbox.vue +1 -1
- package/src/components/Chips/Chips.vue +8 -8
- package/src/components/DatePicker/DatePicker.vue +3 -4
- package/src/components/EditImages/EditImages.vue +32 -14
- package/src/{modules/globals/components/sections → components/Feed}/Feed.vue +60 -45
- package/src/components/FieldBig/FieldBig.vue +16 -5
- package/src/components/FieldPhone/FieldPhone.vue +2 -1
- package/src/components/Footer/Footer.vue +36 -27
- package/src/components/Header/Header.vue +161 -166
- package/src/components/Loader/Loader.vue +9 -2
- package/src/components/LocationMarker/LocationMarker.vue +38 -12
- package/src/components/LocationSelection/LocationSelection.vue +67 -75
- package/src/components/Magnifier/Magnifier.vue +3 -3
- package/src/components/Navigation/Navigation.vue +16 -16
- package/src/components/Popup/Popup.vue +8 -6
- package/src/components/Select/Select.vue +35 -6
- package/src/components/SelectMulti/SelectMulti.vue +5 -13
- package/src/components/Shader/Shader.vue +128 -0
- package/src/components/Sidebar/Sidebar.vue +71 -35
- package/src/components/Spoiler/Spoiler.vue +1 -1
- package/src/components/Tab/Tab.vue +1 -1
- package/src/components/Tooltip/Tooltip.vue +1 -1
- package/src/components/UploadImage/UploadImage.vue +4 -4
- package/src/components/UploadImageMultiple/UploadImageMultiple.vue +54 -10
- package/src/modules/applications/controllers/applications.controller.js +0 -1
- package/src/modules/auth/components/pages/EnterCode.vue +1 -1
- package/src/modules/auth/components/pages/EnterPassword.vue +3 -3
- package/src/modules/auth/components/pages/ResetPassword.vue +1 -2
- package/src/modules/auth/components/pages/SignIn.vue +26 -10
- package/src/modules/auth/components/pages/SignUp.vue +1 -2
- package/src/modules/auth/controllers/twofa.controller.js +4 -4
- package/src/modules/auth/localization/EnterCode.json +2 -2
- package/src/modules/auth/localization/EnterPassword.json +2 -2
- package/src/modules/auth/localization/ResetPassword.json +2 -2
- package/src/modules/auth/localization/SignIn.json +3 -3
- package/src/modules/auth/localization/SignUp.json +3 -3
- package/src/modules/auth/utils/server/verifyAppleIdToken.js +0 -1
- package/src/modules/backoffice/components/layouts/Backoffice.vue +1 -1
- package/src/modules/backoffice/components/pages/Dashboard.vue +171 -120
- package/src/modules/backoffice/router/backoffice.js +119 -129
- package/src/modules/chats/components/blocks/ChatMessage.vue +25 -0
- package/src/modules/chats/components/pages/ChatPage.vue +50 -0
- package/src/modules/chats/components/sections/ChatWindow.vue +38 -0
- package/src/modules/chats/controllers/chats.controller.js +32 -0
- package/src/modules/chats/models/chat.model.js +26 -0
- package/src/modules/chats/routes/chats.routes.js +53 -0
- package/src/modules/chats/store/chat.store.js +61 -0
- package/src/modules/community/components/blocks/CardBlogpost.vue +19 -4
- package/src/modules/community/components/layouts/Community.vue +96 -39
- package/src/modules/community/components/pages/Blog.vue +4 -3
- package/src/modules/community/components/pages/BlogPost.vue +10 -1
- package/src/modules/community/components/pages/CreateBlogPost.vue +36 -17
- package/src/modules/community/components/sections/HotPosts.vue +3 -3
- package/src/modules/community/components/sections/JoinUs.vue +19 -13
- package/src/modules/community/controllers/blog.controller.js +3 -4
- package/src/modules/community/controllers/utils/queryProcessor.js +16 -17
- package/src/modules/community/models/blogpost.model.js +6 -3
- package/src/modules/community/store/blogposts.js +1 -0
- package/src/modules/constructor/components/elements/Embed.vue +12 -1
- package/src/modules/constructor/components/elements/ImageUpload.vue +2 -2
- package/src/modules/constructor/components/elements/Textarea.vue +6 -1
- package/src/modules/constructor/components/elements/Video.vue +79 -0
- package/src/modules/constructor/components/elements/VideoPlayer.vue +59 -0
- package/src/modules/constructor/components/elements/Youtube.vue +52 -0
- package/src/modules/constructor/components/sections/Constructor.vue +27 -3
- package/src/modules/events/components/layouts/layoutEvents.vue +7 -28
- package/src/modules/files/controllers/files.controller.js +9 -22
- package/src/modules/files/middlewares/server/index.js +2 -2
- package/src/modules/files/middlewares/server/middlewareBusboy.js +137 -0
- package/src/modules/files/routes/files.routes.js +9 -9
- package/src/modules/globals/localization/vue-i18n.js +8 -1
- package/src/modules/globals/mixins/mixins.js +23 -13
- package/src/modules/globals/router/routerGuards.js +2 -2
- package/src/modules/globals/store/globals.js +86 -9
- package/src/modules/globals/utils/mailing.js +24 -3
- package/src/modules/icons/entities/IconCommunity.vue +4 -4
- package/src/modules/icons/entities/IconEvents.vue +1 -1
- package/src/modules/icons/entities/IconGroups.vue +1 -1
- package/src/modules/icons/entities/IconPrice.vue +5 -0
- package/src/modules/icons/entities/IconProfile.vue +5 -0
- package/src/modules/icons/entities/IconShopcart.vue +5 -0
- package/src/modules/icons/entities/IconTime.vue +5 -0
- package/src/modules/icons/icons.client.js +4 -0
- package/src/modules/icons/labels/LabelAppStore.vue +24 -24
- package/src/modules/icons/labels/LabelGooglePlay.vue +9 -9
- package/src/modules/icons/logos/Logotype.vue +20 -0
- package/src/modules/icons/navigation/IconAdd.vue +17 -0
- package/src/modules/icons/navigation/IconChevronBottom.vue +18 -0
- package/src/modules/icons/navigation/IconChevronRight.vue +3 -3
- package/src/modules/icons/navigation/IconDelete.vue +19 -0
- package/src/modules/icons/navigation/IconMinus.vue +15 -0
- package/src/modules/icons/navigation/IconSearch.vue +17 -0
- package/src/modules/icons/navigation/IconUpload.vue +16 -0
- package/src/modules/icons/placeholders/PlaceholderImage.vue +5 -0
- package/src/modules/icons/placeholders/PlaceholderOrganizationPic.vue +20 -0
- package/src/modules/icons/placeholders/PlaceholderUserpic.vue +4 -18
- package/src/modules/icons/socials/instagram.vue +1 -1
- package/src/modules/icons/socials/line.vue +1 -1
- package/src/modules/icons/socials/reddit.vue +1 -1
- package/src/modules/icons/socials/telegram.vue +1 -1
- package/src/modules/icons/socials/twitter.vue +1 -1
- package/src/modules/icons/socials/youtube.vue +1 -1
- package/src/modules/landing/components/sections/Guide.vue +92 -0
- package/src/modules/landing/components/sections/MobileApp.vue +23 -12
- package/src/modules/marketplace/components/layouts/Marketplace.vue +76 -188
- package/src/modules/marketplace/components/pages/Catalog.vue +65 -119
- package/src/modules/marketplace/components/sections/Filters.vue +195 -0
- package/src/modules/marketplace/store/marketplace.js +2 -2
- package/src/modules/middlewares/client/auth.validation.js +0 -6
- package/src/modules/middlewares/client/states.validation.js +2 -8
- package/src/modules/middlewares/server/authJwt.js +1 -1
- package/src/modules/mobile/components/Menu/MenuItem.vue +3 -6
- package/src/modules/openai/controllers/openai.controller.js +0 -1
- package/src/modules/orders/components/blocks/CardOrder.vue +166 -0
- package/src/modules/orders/components/blocks/CardOrderItem.vue +59 -66
- package/src/modules/orders/components/blocks/Positions.vue +4 -4
- package/src/modules/orders/components/pages/EditOrder.vue +78 -142
- package/src/modules/orders/components/pages/FormOrder.vue +192 -0
- package/src/modules/orders/components/pages/Order.vue +326 -120
- package/src/modules/orders/components/pages/Orders.vue +13 -9
- package/src/modules/orders/components/pages/{ViewOrder.vue → Orders_refact.vue} +13 -10
- package/src/modules/orders/components/partials/ShopCart.vue +22 -13
- package/src/modules/orders/components/sections/EmptyState.vue +1 -1
- package/src/modules/orders/components/sections/{Form.vue → FormOrderDetails.vue} +38 -106
- package/src/modules/orders/controllers/orders.controller.js +37 -28
- package/src/modules/orders/models/order.model.js +39 -9
- package/src/modules/orders/router/orders.router.js +23 -2
- package/src/modules/orders/routes/orders.routes.js +14 -17
- package/src/modules/orders/store/orders.js +24 -9
- package/src/modules/orders/store/shopcart.js +20 -19
- package/src/modules/organizations/components/blocks/CardDepartment.vue +1 -1
- package/src/modules/organizations/components/blocks/CardOrganization.vue +98 -46
- package/src/modules/organizations/components/blocks/Rating.vue +1 -1
- package/src/modules/organizations/components/blocks/Socials.vue +11 -3
- package/src/modules/organizations/components/elements/ButtonToggleMembership.vue +1 -1
- package/src/modules/organizations/components/pages/Department.vue +1 -1
- package/src/modules/organizations/components/pages/DepartmentEdit.vue +4 -4
- package/src/modules/organizations/components/pages/Members.vue +6 -4
- package/src/modules/organizations/components/pages/Organization.vue +120 -49
- package/src/modules/organizations/components/pages/OrganizationEdit.vue +8 -1
- package/src/modules/organizations/components/pages/Organizations.vue +27 -6
- package/src/modules/organizations/components/sections/DetailsTab.vue +11 -9
- package/src/modules/organizations/components/sections/Feed.vue +0 -3
- package/src/modules/organizations/components/sections/FeedDepartments.vue +2 -2
- package/src/modules/organizations/controllers/organizations.controller.js +126 -15
- package/src/modules/organizations/controllers/utils/addMembersQuantity.js +19 -9
- package/src/modules/organizations/models/organization.model.js +5 -2
- package/src/modules/organizations/router/members.router.js +1 -3
- package/src/modules/organizations/router/organizations.js +8 -6
- package/src/modules/organizations/router/products.router.js +36 -2
- package/src/modules/organizations/store/organizations.js +38 -84
- package/src/modules/pages/controllers/pages.controller.js +0 -4
- package/src/modules/payments/controller/payments.controller.js +1 -1
- package/src/modules/products/components/blocks/CardLeftover.vue +17 -22
- package/src/modules/products/components/blocks/CardPosition.vue +96 -49
- package/src/modules/products/components/blocks/CardProduct.vue +24 -53
- package/src/modules/products/components/blocks/Images360.vue +4 -4
- package/src/modules/products/components/blocks/ImagesThumbnails.vue +2 -7
- package/src/modules/products/components/blocks/ListPositions.vue +74 -0
- package/src/modules/products/components/elements/Price.vue +11 -5
- package/src/modules/products/components/elements/THC.vue +6 -6
- package/src/modules/products/components/pages/{LeftoverAdd.vue → EditLeftover.vue} +93 -79
- package/src/modules/products/components/pages/Leftovers.vue +74 -70
- package/src/modules/products/components/pages/Product.vue +4 -7
- package/src/modules/products/components/pages/ProductEdit.vue +230 -88
- package/src/modules/products/components/pages/ProductRecommmendation.vue +1 -1
- package/src/modules/products/components/pages/Products.vue +6 -3
- package/src/modules/products/components/pages/ProductsBackoffice.vue +3 -5
- package/src/modules/products/components/sections/EditModifications.vue +3 -3
- package/src/modules/products/components/sections/EditProductInfo.vue +40 -50
- package/src/modules/products/components/sections/FilterProducts.vue +57 -18
- package/src/modules/products/components/sections/HeroRecommendation.vue +233 -99
- package/src/modules/products/components/sections/MenuSection.vue +127 -0
- package/src/modules/products/components/sections/PopularProducts.vue +81 -37
- package/src/modules/products/components/sections/SectionProduct.vue +21 -23
- package/src/modules/products/controllers/leftovers.controller.js +11 -1
- package/src/modules/products/controllers/products.controller.js +100 -97
- package/src/modules/products/models/leftover.model.js +6 -4
- package/src/modules/products/models/product.model.js +13 -1
- package/src/modules/products/routes/products.routes.js +4 -4
- package/src/modules/products/store/leftovers.js +4 -24
- package/src/modules/products/store/products.js +44 -30
- package/src/modules/spots/components/blocks/CardSpot.vue +43 -72
- package/src/modules/spots/components/layouts/Spots.vue +9 -91
- package/src/modules/spots/components/pages/Map.vue +171 -62
- package/src/modules/spots/components/pages/Spot.vue +1 -1
- package/src/modules/spots/components/pages/SpotEdit.vue +131 -174
- package/src/modules/spots/controllers/spots.controller.js +1 -0
- package/src/modules/spots/models/spot.model.js +6 -3
- package/src/modules/spots/store/spots.js +42 -48
- package/src/modules/users/components/pages/Profile.vue +6 -28
- package/src/modules/users/components/pages/ProfileBlogposts.vue +1 -1
- package/src/modules/users/components/pages/ProfileEdit.vue +1 -1
- package/src/modules/users/components/pages/ProfileEvents.vue +1 -1
- package/src/modules/users/components/pages/ProfileOrganizations.vue +1 -1
- package/src/modules/users/router/users.js +1 -1
- package/src/modules/wallet/components/pages/Wallet.vue +105 -109
- package/src/modules/wallet/controllers/crypto.controller.js +129 -0
- package/src/modules/wallet/models/reward.model.js +53 -0
- package/src/modules/wallet/routes/crypto.routes.js +36 -0
- package/src/modules/wallet/store/wallet.js +52 -49
- package/src/styles/base/all.scss +143 -11
- package/src/styles/base/backgrounds.scss +2 -34
- package/src/styles/base/borders.scss +18 -23
- package/src/styles/base/scrolling.scss +97 -29
- package/src/styles/base/{shadows.scss → shadow_transitions_hover_refactor.scss} +55 -2
- package/src/styles/config.scss +69 -17
- package/src/styles/layout.scss +12 -182
- package/src/styles/reset.scss +20 -21
- package/src/styles/responsive.scss +4 -67
- package/src/styles/theme.scss +3 -4
- package/src/styles/typography.scss +15 -17
- package/src/assets/fonts/AvenirNext-Bold.woff2 +0 -0
- package/src/assets/fonts/AvenirNext-DemiBold.woff2 +0 -0
- package/src/assets/fonts/AvenirNext-Heavy.woff2 +0 -0
- package/src/assets/fonts/AvenirNext-Medium.woff2 +0 -0
- package/src/assets/fonts/AvenirNext-Regular.woff2 +0 -0
- package/src/assets/fonts/AvenirNext-UltraLight.woff2 +0 -0
- package/src/modules/files/middlewares/server/md.js +0 -152
- package/src/modules/files/middlewares/server/middlewareMulter.js +0 -121
- package/src/modules/organizations/controllers/organizations.new.controller.js +0 -372
- package/src/modules/products/components/blocks/EditCategories.vue +0 -68
- package/src/modules/products/components/sections/EditParameters.vue +0 -58
- package/src/modules/products/components/sections/EditProductImages.vue +0 -67
- package/src/modules/spots/components/sections/Feed.vue +0 -64
- package/src/styles/base/border-radius.scss +0 -47
- package/src/styles/base/cursors.scss +0 -23
- package/src/styles/base/height.scss +0 -60
- package/src/styles/base/hovers.scss +0 -110
- package/src/styles/base/positions.scss +0 -192
- package/src/styles/base/transitions.scss +0 -137
- package/src/styles/base/width.scss +0 -2
- package/src/styles/components/block.scss +0 -18
- package/src/styles/components/breadcrumbs.scss +0 -0
- package/src/styles/components/input.scss +0 -319
@@ -4,9 +4,9 @@
|
|
4
4
|
<!-- 01. Popup Header -->
|
5
5
|
<!-- ---------------------------------------------------------------- -->
|
6
6
|
<div class="flex-nowrap flex">
|
7
|
-
<div class="w-100">
|
8
|
-
<h4 class="mn-
|
9
|
-
<p class="t-transp p-small">{{t('subtitle')}} {{ t('
|
7
|
+
<div class="mn-b-small w-100">
|
8
|
+
<h4 class="mn-b-thin p-big">{{t('title')}}</h4>
|
9
|
+
<p class="t-transp p-small">{{t('subtitle')}} {{ t('positions', { count: StoreCartAmount }) }}</p>
|
10
10
|
</div>
|
11
11
|
<button @click="shopcart.actions.toggleShopcart" class="button-icon"><img src="@/assets/icons/cross.svg"></button>
|
12
12
|
</div>
|
@@ -15,9 +15,9 @@
|
|
15
15
|
<!-- ---------------------------------------------------------------- -->
|
16
16
|
<div class="mn-b-big shopcart-content">
|
17
17
|
<!-- Empty State -->
|
18
|
-
<p v-if="!(shopcart.state.
|
19
|
-
<!-- Shopcart
|
20
|
-
<CardOrderItem v-for="product in shopcart.state.
|
18
|
+
<p v-if="!(shopcart.state.positions.length > 0)" class="mn-t-medium"><i>{{t('emptystate')}}</i></p>
|
19
|
+
<!-- Shopcart positions -->
|
20
|
+
<CardOrderItem v-for="product in shopcart.state.positions" :key="product._id" editable="true" :product="product"
|
21
21
|
:increase="product => shopcart.actions.incrementItemQuantity(product._id)"
|
22
22
|
:decrease="product => shopcart.actions.decrementItemQuantity(product._id)"
|
23
23
|
:remove="product => shopcart.actions.removeProduct(product._id)"
|
@@ -27,11 +27,11 @@
|
|
27
27
|
<!-- 03. Footer -->
|
28
28
|
<!-- ---------------------------------------------------------------- -->
|
29
29
|
<div class="shopcart-footer pd-b-medium pd-t-medium pd-big transition-cubic bg-black t-white">
|
30
|
-
<div v-if="shopcart.state.
|
30
|
+
<div v-if="shopcart.state.positions.length > 0" class="mn-b-small total-price">
|
31
31
|
<p class="t-transp t-white mn-b-micro">{{ t('intotal') }}</p>
|
32
32
|
<p class="t-demi t-white p-big">{{cartTotalPrice}} {{returnCurrency()}}</p>
|
33
33
|
</div>
|
34
|
-
<button v-if="shopcart.state.
|
34
|
+
<button v-if="shopcart.state.positions.length > 0" @click="openOrder()" class="bg-main t-black w-100 button">{{ t('fastorder') }}</button>
|
35
35
|
</div>
|
36
36
|
</section>
|
37
37
|
<!-- ---------------------------------------------------------------- -->
|
@@ -66,6 +66,14 @@
|
|
66
66
|
// Accessing state
|
67
67
|
const cartTotalPrice = shopcart.getters.cartTotalPrice
|
68
68
|
const StoreCartAmount = shopcart.getters.cartTotalAmount
|
69
|
+
//
|
70
|
+
// router.beforeEach((to, from, next) => {
|
71
|
+
// if (shopcart.state.currentState === true) {
|
72
|
+
// shopcart.actions.toggleShopcart();
|
73
|
+
// }
|
74
|
+
// next(); // Убедитесь, что вызываете next() для продолжения перехода по роуту
|
75
|
+
// });
|
76
|
+
|
69
77
|
/////////////////////////////
|
70
78
|
// LOCALIZATION
|
71
79
|
/////////////////////////////
|
@@ -74,15 +82,15 @@
|
|
74
82
|
en: {
|
75
83
|
title: 'Your order',
|
76
84
|
subtitle: 'You have',
|
77
|
-
|
78
|
-
emptystate: "You don't have any
|
85
|
+
positions: 'no products in shop cart | 1 product in shop cart | {count} products in shop card',
|
86
|
+
emptystate: "You don't have any positions in your shop cart yet. Maybe something needs to be added?",
|
79
87
|
intotal: 'In total',
|
80
|
-
fastorder: '
|
88
|
+
fastorder: 'Checkout'
|
81
89
|
},
|
82
90
|
ru: {
|
83
91
|
title: 'Ваш заказ',
|
84
92
|
subtitle: 'У вас',
|
85
|
-
|
93
|
+
positions: 'нет товаров в корзине | 1 товар в корзине | {count} товаров в корзине',
|
86
94
|
emptystate: "У вас еще нет товаров в корзине. Может стоит что-нибудь добавить?",
|
87
95
|
intotal: 'Итого',
|
88
96
|
fastorder: 'Подтвердить заказ'
|
@@ -97,7 +105,8 @@
|
|
97
105
|
function openOrder() {
|
98
106
|
// store.dispatch("shopcart/toggleShopCart");
|
99
107
|
// store.dispatch("shopcart/setSearch");
|
100
|
-
router.push({name: 'Order'})
|
108
|
+
router.push({name: 'Form Order'})
|
109
|
+
shopcart.actions.toggleShopcart();
|
101
110
|
}
|
102
111
|
</script>
|
103
112
|
|
@@ -1,14 +1,15 @@
|
|
1
1
|
<template>
|
2
2
|
<div class="order-form col">
|
3
3
|
<!-- Client info -->
|
4
|
-
<
|
5
|
-
|
6
|
-
|
4
|
+
<Block
|
5
|
+
title="Personal Data"
|
6
|
+
class="mn-b-thin"
|
7
|
+
>
|
7
8
|
<!-- Name and surname -->
|
8
9
|
<Field
|
9
10
|
v-model:field="order.user.name"
|
10
11
|
label="Name*"
|
11
|
-
placeholder="
|
12
|
+
placeholder="Enter your name"
|
12
13
|
class="
|
13
14
|
bg-white
|
14
15
|
pd-medium
|
@@ -17,20 +18,21 @@
|
|
17
18
|
"
|
18
19
|
/>
|
19
20
|
<!-- Phone -->
|
20
|
-
<
|
21
|
-
v-model:
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
"
|
21
|
+
<FieldPhone
|
22
|
+
v-model:modelValue="order.user.phone"
|
23
|
+
:dropdownOptions="{
|
24
|
+
showDialCodeInSelection: true,
|
25
|
+
showFlags: true,
|
26
|
+
showDialCodeInList: true
|
27
|
+
}"
|
28
|
+
:validation="phoneValidation"
|
29
|
+
mode="national"
|
30
|
+
:inputOptions="{placeholder: 'Enter contact phone number'}"
|
31
|
+
class="bg-white pd-small radius-small mn-b-thin"
|
30
32
|
/>
|
31
33
|
|
32
34
|
<p class="mn-b-small">
|
33
|
-
|
35
|
+
Prefer to chat instead of calling? Just drop your messenger info here:
|
34
36
|
</p>
|
35
37
|
|
36
38
|
<div class="flex-nowrap flex">
|
@@ -62,17 +64,14 @@
|
|
62
64
|
"
|
63
65
|
/>
|
64
66
|
</div>
|
65
|
-
</
|
67
|
+
</Block>
|
66
68
|
|
67
69
|
<!-- Delivery -->
|
68
|
-
<
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
<img src="@/assets/icons/info.svg" class="i-base">
|
74
|
-
</Tooltip>
|
75
|
-
</p>
|
70
|
+
<Block
|
71
|
+
title="Delivery"
|
72
|
+
class="mn-b-thin"
|
73
|
+
:tooltip="'Delivery by mail takes 3-5 days.'"
|
74
|
+
>
|
76
75
|
<!-- Type of delivery -->
|
77
76
|
<div class="mn-b-small flex-nowrap flex">
|
78
77
|
<Radio
|
@@ -99,21 +98,9 @@
|
|
99
98
|
mn-r-small
|
100
99
|
"
|
101
100
|
/>
|
102
|
-
<Radio
|
103
|
-
v-model:radio="order.delivery.type"
|
104
|
-
label="Pickup"
|
105
|
-
value="pickup"
|
106
|
-
class="
|
107
|
-
bg-white
|
108
|
-
pd-medium
|
109
|
-
radius-small
|
110
|
-
w-100
|
111
|
-
"
|
112
|
-
/>
|
113
101
|
</div>
|
114
102
|
<!-- Adress-->
|
115
103
|
<Address
|
116
|
-
v-if="order.delivery.type !== 'pickup'"
|
117
104
|
apiKey="AIzaSyDDR6WgYB7XMt7yTDDzQNEdF_gTdUiq8dI"
|
118
105
|
v-model:address="order.delivery.address"
|
119
106
|
label="Address"
|
@@ -127,7 +114,7 @@
|
|
127
114
|
"
|
128
115
|
/>
|
129
116
|
<Field
|
130
|
-
v-model:field="order.
|
117
|
+
v-model:field="order.comment"
|
131
118
|
placeholder="Comments regarding the address (apartment unit, floor level, building section)"
|
132
119
|
type="textarea"
|
133
120
|
class="
|
@@ -136,19 +123,21 @@
|
|
136
123
|
radius-small
|
137
124
|
"
|
138
125
|
/>
|
139
|
-
</
|
126
|
+
</Block>
|
140
127
|
<!-- Type of payment -->
|
141
|
-
<
|
142
|
-
|
143
|
-
|
128
|
+
<Block
|
129
|
+
title="Payment"
|
130
|
+
>
|
144
131
|
<div class="mn-b-small flex-nowrap flex">
|
145
132
|
<Select
|
133
|
+
v-model:select="order.payment.type"
|
134
|
+
:property="'value'"
|
146
135
|
:options="[
|
147
|
-
{name: 'Cash On Delivery', value: '
|
148
|
-
{name: 'Bank Transfer', value: '
|
149
|
-
{name: 'Crypto', value: '
|
136
|
+
{name: 'Cash On Delivery', value: 'cash'},
|
137
|
+
{name: 'Bank Transfer', value: 'bank'},
|
138
|
+
{name: 'Crypto', value: 'crypto'},
|
150
139
|
]"
|
151
|
-
|
140
|
+
|
152
141
|
placeholder="Select type of payment"
|
153
142
|
size="small"
|
154
143
|
class="
|
@@ -159,23 +148,9 @@
|
|
159
148
|
"
|
160
149
|
/>
|
161
150
|
</div>
|
162
|
-
</
|
151
|
+
</Block>
|
163
152
|
|
164
|
-
|
165
|
-
<button
|
166
|
-
:disabled="
|
167
|
-
errorName
|
168
|
-
|| errorPhone
|
169
|
-
|| errorCity
|
170
|
-
|| errorAdress
|
171
|
-
|| errorDelivery
|
172
|
-
|| errorPayment
|
173
|
-
"
|
174
|
-
@click="onSubmit()"
|
175
|
-
class="button"
|
176
|
-
>
|
177
|
-
Place an Order
|
178
|
-
</button>
|
153
|
+
|
179
154
|
</div>
|
180
155
|
|
181
156
|
</template>
|
@@ -187,11 +162,12 @@ import * as orders from '@pf/src/modules/orders/store/orders';
|
|
187
162
|
/////////////////////////////
|
188
163
|
// COMPONENT DEPENDENCIES
|
189
164
|
/////////////////////////////
|
165
|
+
import Block from '@pf/src/components/Block/Block.vue'
|
190
166
|
import Field from '@pf/src/components/Field/Field.vue'
|
167
|
+
import FieldPhone from '@pf/src/components/FieldPhone/FieldPhone.vue'
|
191
168
|
import Select from '@pf/src/components/Select/Select.vue'
|
192
169
|
import Address from '@pf/src/components/Address/Address.vue'
|
193
170
|
import Radio from '@pf/src/components/Radio/Radio.vue'
|
194
|
-
import Tooltip from '@pf/src/components/Tooltip/Tooltip.vue'
|
195
171
|
/////////////////////////////
|
196
172
|
// HELPERS
|
197
173
|
/////////////////////////////
|
@@ -202,50 +178,6 @@ import Tooltip from '@pf/src/components/Tooltip/Tooltip.vue'
|
|
202
178
|
const props = defineProps({
|
203
179
|
order: Object,
|
204
180
|
});
|
205
|
-
|
206
|
-
const emits = defineEmits([
|
207
|
-
'create'
|
208
|
-
])
|
209
|
-
/////////////////////////////
|
210
|
-
// Store Verification
|
211
|
-
/////////////////////////////
|
212
|
-
// const errorName = computed(() => {
|
213
|
-
// return props.order.user.name.length < 2 ? "Заполните поле имени" : false
|
214
|
-
// })
|
215
|
-
|
216
|
-
// const errorPhone = computed(() => {
|
217
|
-
// return props.order.user.phone.length < 6 ? "Заполните поле телефона" : false
|
218
|
-
// })
|
219
|
-
|
220
|
-
// const errorAdress = computed(() => {
|
221
|
-
// if (props.delivery !== "Pickup") {
|
222
|
-
// return props.order.delivery.address < 2 ? "Заполните поле адреса" : false
|
223
|
-
// } else {
|
224
|
-
// return false
|
225
|
-
// }
|
226
|
-
// })
|
227
|
-
|
228
|
-
// const errorDelivery = computed(() => {
|
229
|
-
// if (props.order.delivery.type) {
|
230
|
-
// return false
|
231
|
-
// } else {
|
232
|
-
// return true
|
233
|
-
// }
|
234
|
-
// })
|
235
|
-
|
236
|
-
// const errorPayment = computed(() => {
|
237
|
-
// if (props.order.payment.type) {
|
238
|
-
// return false
|
239
|
-
// } else {
|
240
|
-
// return true
|
241
|
-
// }
|
242
|
-
// })
|
243
|
-
///////////////////////////////////////////////////////////////////////////////////////////////////
|
244
|
-
// Methods
|
245
|
-
///////////////////////////////////////////////////////////////////////////////////////////////////
|
246
|
-
function onSubmit() {
|
247
|
-
emits('create')
|
248
|
-
}
|
249
181
|
/////////////////////////////
|
250
182
|
// MOUNTED
|
251
183
|
/////////////////////////////
|
@@ -1,3 +1,6 @@
|
|
1
|
+
const { sendChatMessageTelegram } = require('@pf/src/modules/globals/utils/mailing');
|
2
|
+
|
3
|
+
|
1
4
|
const controllerFactory = (db) => {
|
2
5
|
const Order = db.order;
|
3
6
|
|
@@ -27,15 +30,41 @@ const controllerFactory = (db) => {
|
|
27
30
|
}
|
28
31
|
};
|
29
32
|
|
33
|
+
function formatPositions(positions) {
|
34
|
+
return positions.map(pos => `🔹 ${pos.name} - Price: $${pos.price}, Quantity: ${pos.quantity}`).join('\n');
|
35
|
+
}
|
36
|
+
|
37
|
+
// Функция для форматирования сообщения об ордере
|
38
|
+
function formatOrderMessage(order) {
|
39
|
+
return `
|
40
|
+
🆕 New Order Received!
|
41
|
+
👤 Client: ${order.user.name} (${order.user.phone.number ? order.user.phone.number : 'No phone'})
|
42
|
+
💬 Messenger: ${order.user.messenger ? order.user.messenger.type + ' ' + order.user.messenger.value : 'None'}
|
43
|
+
🏢 Organization: ${order.organization}
|
44
|
+
📦 Positions:\n${formatPositions(order.positions)}
|
45
|
+
📝 Comment: ${order.comment ? order.comment : 'No comment'}
|
46
|
+
💳 Payment: ${order.payment.type}
|
47
|
+
🚚 Delivery: ${order.delivery.type} to ${order.delivery.address}
|
48
|
+
📌 Status: ${order.status}
|
49
|
+
`;
|
50
|
+
}
|
51
|
+
|
30
52
|
// Создание заказа
|
31
53
|
const create = async (req, res) => {
|
32
54
|
delete req.body._id;
|
33
55
|
|
34
|
-
|
56
|
+
req.body.status = 'created'
|
57
|
+
|
58
|
+
try {
|
59
|
+
const formattedMessage = formatOrderMessage(req.body);
|
60
|
+
console.log(formattedMessage)
|
61
|
+
const messageSent = await sendChatMessageTelegram(process.env.TELEGRAM_BOT_USERS.split(","),formattedMessage)
|
62
|
+
} catch (err) {
|
63
|
+
console.log(err)
|
64
|
+
}
|
35
65
|
|
36
66
|
try {
|
37
67
|
const order = await Order.create(req.body);
|
38
|
-
console.log(order)
|
39
68
|
res.status(201).send(order);
|
40
69
|
} catch (err) {
|
41
70
|
console.log(err)
|
@@ -44,12 +73,14 @@ const controllerFactory = (db) => {
|
|
44
73
|
};
|
45
74
|
|
46
75
|
// Обновление заказа
|
47
|
-
const
|
76
|
+
const update = async (req, res) => {
|
77
|
+
console.log(req.body)
|
78
|
+
console.log(req.params._id)
|
79
|
+
|
48
80
|
try {
|
49
81
|
const order = await Order.findOneAndUpdate(
|
50
82
|
{ _id: req.params._id },
|
51
|
-
|
52
|
-
{ new: true }
|
83
|
+
req.body,
|
53
84
|
).exec();
|
54
85
|
if (!order) {
|
55
86
|
return res.status(404).send({ errorCode: "ORDER_UPDATE_FAILED", message: "Failed to update the order." });
|
@@ -60,27 +91,6 @@ const controllerFactory = (db) => {
|
|
60
91
|
}
|
61
92
|
};
|
62
93
|
|
63
|
-
// Подтверждение заказа
|
64
|
-
const confirmOrder = async (req, res) => {
|
65
|
-
try {
|
66
|
-
var prop = req.body.prop;
|
67
|
-
var updatedOrder = {};
|
68
|
-
updatedOrder[prop] = req.body.status;
|
69
|
-
|
70
|
-
const order = await Order.findOneAndUpdate(
|
71
|
-
{ _id: req.params._id },
|
72
|
-
updatedOrder,
|
73
|
-
{ new: true }
|
74
|
-
).exec();
|
75
|
-
if (!order) {
|
76
|
-
return res.status(404).send({ errorCode: "ORDER_CONFIRM_FAILED", message: "Failed to confirm the order." });
|
77
|
-
}
|
78
|
-
res.status(200).send(order);
|
79
|
-
} catch (err) {
|
80
|
-
res.status(500).send({ errorCode: "CONFIRM_ORDER_FAILED", message: "Error occurred while confirming the order.", error: err });
|
81
|
-
}
|
82
|
-
};
|
83
|
-
|
84
94
|
// Изменение статуса оплаты
|
85
95
|
const changePaymentStatus = async (req, res) => {
|
86
96
|
try {
|
@@ -115,8 +125,7 @@ const controllerFactory = (db) => {
|
|
115
125
|
create,
|
116
126
|
read,
|
117
127
|
getOrder,
|
118
|
-
|
119
|
-
confirmOrder,
|
128
|
+
update,
|
120
129
|
changePaymentStatus,
|
121
130
|
deleteOrder
|
122
131
|
};
|
@@ -1,26 +1,56 @@
|
|
1
1
|
module.exports = (db) => {
|
2
2
|
|
3
3
|
const OrderSchema = new db.mongoose.Schema({
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
owner: {
|
5
|
+
type: db.mongoose.Schema.Types.ObjectId,
|
6
|
+
ref: 'User',
|
7
|
+
},
|
7
8
|
user: {
|
8
9
|
_id: { type: Boolean },
|
9
10
|
name: { type: String, trim: true },
|
10
|
-
phone: { type:
|
11
|
+
phone: { type: Object, trim: true },
|
11
12
|
messenger: {
|
12
13
|
type: { type: String, trim: true },
|
13
14
|
value: { type: String, trim: true }
|
14
15
|
}
|
15
16
|
},
|
17
|
+
organization: {
|
18
|
+
type: db.mongoose.Schema.Types.ObjectId,
|
19
|
+
ref: 'Organization',
|
20
|
+
},
|
21
|
+
positions: {
|
22
|
+
type: Array
|
23
|
+
},
|
24
|
+
status: {
|
25
|
+
type: String
|
26
|
+
},
|
27
|
+
comment: {
|
28
|
+
type: String,
|
29
|
+
trim: true
|
30
|
+
},
|
16
31
|
payment: {
|
17
|
-
type: {
|
18
|
-
|
32
|
+
type: {
|
33
|
+
type: String,
|
34
|
+
trim: true
|
35
|
+
},
|
36
|
+
status: {
|
37
|
+
type: String,
|
38
|
+
trim: true
|
39
|
+
}
|
19
40
|
},
|
20
41
|
delivery: {
|
21
|
-
type: {
|
22
|
-
|
23
|
-
|
42
|
+
type: {
|
43
|
+
type: String,
|
44
|
+
trim: true
|
45
|
+
},
|
46
|
+
address: {
|
47
|
+
type: String,
|
48
|
+
trim: true
|
49
|
+
},
|
50
|
+
status: {
|
51
|
+
type: String,
|
52
|
+
trim: true
|
53
|
+
}
|
24
54
|
}
|
25
55
|
}, {
|
26
56
|
timestamps: {
|
@@ -11,8 +11,29 @@ const orders = [
|
|
11
11
|
}
|
12
12
|
},
|
13
13
|
children: [{
|
14
|
-
path: '',
|
15
|
-
name: 'Order',
|
14
|
+
path: 'form',
|
15
|
+
name: 'Form Order',
|
16
|
+
meta: {
|
17
|
+
title: {
|
18
|
+
en: 'Order',
|
19
|
+
ru: 'Заказ'
|
20
|
+
}
|
21
|
+
},
|
22
|
+
component: () => import(/* webpackChunkName: 'Order' */ '@pf/src/modules/orders/components/pages/FormOrder.vue')
|
23
|
+
},{
|
24
|
+
path: ':order',
|
25
|
+
name: 'Order Status',
|
26
|
+
meta: {
|
27
|
+
title: {
|
28
|
+
en: 'Order',
|
29
|
+
ru: 'Заказ'
|
30
|
+
}
|
31
|
+
},
|
32
|
+
component: () => import(/* webpackChunkName: 'Order' */ '@pf/src/modules/orders/components/pages/Order.vue')
|
33
|
+
},
|
34
|
+
{
|
35
|
+
path: ':order/edit',
|
36
|
+
name: 'AdminOrderEdit',
|
16
37
|
meta: {
|
17
38
|
title: {
|
18
39
|
en: 'Order',
|
@@ -20,6 +20,11 @@ module.exports = function(app, db) {
|
|
20
20
|
app.post(
|
21
21
|
"/api/orders/create",
|
22
22
|
controller.create
|
23
|
+
);
|
24
|
+
// Get order
|
25
|
+
app.get(
|
26
|
+
"/api/orders/:_id",
|
27
|
+
controller.getOrder
|
23
28
|
);
|
24
29
|
// Get orders
|
25
30
|
app.get(
|
@@ -28,28 +33,15 @@ module.exports = function(app, db) {
|
|
28
33
|
);
|
29
34
|
app.post(
|
30
35
|
"/api/orders/update",
|
31
|
-
controller.
|
36
|
+
controller.update
|
32
37
|
);
|
33
|
-
//
|
38
|
+
// Update order
|
34
39
|
app.post(
|
35
|
-
"/api/orders/delete",
|
36
|
-
controller.deleteOrder
|
37
|
-
);
|
38
|
-
// Get order
|
39
|
-
app.get(
|
40
40
|
"/api/orders/:_id",
|
41
|
-
controller.
|
41
|
+
controller.update
|
42
42
|
);
|
43
|
-
//
|
43
|
+
// Get orders
|
44
44
|
app.post(
|
45
|
-
"/api/orders/:_id",
|
46
|
-
controller.updateOrder
|
47
|
-
);
|
48
|
-
app.post(
|
49
|
-
"/api/orders/confirm/:_id",
|
50
|
-
controller.confirmOrder
|
51
|
-
);
|
52
|
-
app.post(
|
53
45
|
"/api/orders/payment/:_id",
|
54
46
|
controller.changePaymentStatus
|
55
47
|
);
|
@@ -58,6 +50,11 @@ module.exports = function(app, db) {
|
|
58
50
|
"/api/orders/:_id",
|
59
51
|
controller.deleteOrder
|
60
52
|
);
|
53
|
+
app.post(
|
54
|
+
"/api/orders/delete",
|
55
|
+
controller.deleteOrder
|
56
|
+
);
|
57
|
+
|
61
58
|
|
62
59
|
};
|
63
60
|
|
@@ -11,7 +11,8 @@ const state = reactive({
|
|
11
11
|
all: [],
|
12
12
|
current: {
|
13
13
|
_id: '',
|
14
|
-
|
14
|
+
organization: '',
|
15
|
+
positions: [],
|
15
16
|
status: false,
|
16
17
|
comment: '',
|
17
18
|
|
@@ -31,7 +32,7 @@ const state = reactive({
|
|
31
32
|
},
|
32
33
|
|
33
34
|
delivery: {
|
34
|
-
type:
|
35
|
+
type: null,
|
35
36
|
address: '',
|
36
37
|
status: '',
|
37
38
|
}
|
@@ -39,15 +40,27 @@ const state = reactive({
|
|
39
40
|
});
|
40
41
|
|
41
42
|
const actions = {
|
42
|
-
async create(order) {
|
43
|
+
async create(order, organization) {
|
43
44
|
try {
|
44
|
-
state.current.
|
45
|
+
state.current.positions = order
|
46
|
+
state.current.organization = organization
|
45
47
|
|
46
48
|
console.log(state.current)
|
49
|
+
|
47
50
|
const response = await $axios.post('/api/orders/create', state.current);
|
48
51
|
|
49
|
-
console.log(response)
|
50
52
|
state.all.push(response.data);
|
53
|
+
return Promise.resolve(response.data);
|
54
|
+
} catch (error) {
|
55
|
+
setError(error);
|
56
|
+
}
|
57
|
+
},
|
58
|
+
|
59
|
+
async fetchOrder(orderID) {
|
60
|
+
try {
|
61
|
+
const response = await $axios.get(`/api/orders/${orderID}`);
|
62
|
+
console.log(response)
|
63
|
+
state.current = response.data;
|
51
64
|
} catch (error) {
|
52
65
|
setError(error);
|
53
66
|
}
|
@@ -63,10 +76,12 @@ const actions = {
|
|
63
76
|
}
|
64
77
|
},
|
65
78
|
|
66
|
-
async update(
|
79
|
+
async update(order) {
|
67
80
|
try {
|
68
|
-
const response = await $axios.post(`/api/orders/${
|
69
|
-
|
81
|
+
const response = await $axios.post(`/api/orders/${order._id}`, order);
|
82
|
+
|
83
|
+
const index = state.all.findIndex(o => o._id === order._id);
|
84
|
+
|
70
85
|
if (index !== -1) {
|
71
86
|
state.all[index] = response.data;
|
72
87
|
}
|
@@ -120,5 +135,5 @@ watch(state, (newState, oldState) => {
|
|
120
135
|
|
121
136
|
export {
|
122
137
|
state,
|
123
|
-
actions
|
138
|
+
actions,
|
124
139
|
}
|