@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
@@ -0,0 +1,195 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="z-index-1 pos-relative radius-big bg-black t-white pd-medium flex-v-center flex-nowrap flex">
|
3
|
+
<!-- <p class="t-semi radius-extra uppercase p-medium mn-r-thin">Filter by</p> -->
|
4
|
+
<Dropdown
|
5
|
+
:label="t('categoriesTitle')"
|
6
|
+
class="cursor-pointer mn-r-small br-solid br-2px br-white pd-thin t-semi radius-extra uppercase p-medium"
|
7
|
+
:class="[
|
8
|
+
store.marketplace.state.filter.categories.length > 0 ? 'bg-white t-black' : ''
|
9
|
+
]"
|
10
|
+
>
|
11
|
+
<div class="w-100 h-100 radius-semi o-hidden bg-black">
|
12
|
+
<Checkbox
|
13
|
+
v-for="(category, index) in categories"
|
14
|
+
:label="category.name"
|
15
|
+
name="categories"
|
16
|
+
:value="category.url"
|
17
|
+
class="cursor-pointer w-100 bg-black t-white radius-small pd-small"
|
18
|
+
:radio="store.marketplace.state.filter.categories"
|
19
|
+
@update:radio="event => store.marketplace.state.filter.categories = event"
|
20
|
+
/>
|
21
|
+
</div>
|
22
|
+
</Dropdown>
|
23
|
+
|
24
|
+
<Dropdown
|
25
|
+
:label="t('filters.price.title')"
|
26
|
+
class="cursor-pointer mn-r-small br-solid br-2px br-white pd-thin t-semi radius-extra uppercase p-medium"
|
27
|
+
:class="[
|
28
|
+
store.marketplace.state.filter.prices.length > 0 ? 'bg-white t-black' : ''
|
29
|
+
]"
|
30
|
+
>
|
31
|
+
<div class="w-100 h-100 radius-semi o-hidden bg-black">
|
32
|
+
<Checkbox
|
33
|
+
v-for="(price, index) in prices"
|
34
|
+
:label="price.label"
|
35
|
+
name="prices"
|
36
|
+
:value="price.value"
|
37
|
+
class="cursor-pointer w-100 mn-t-small bg-black t-white radius-small pd-small"
|
38
|
+
:radio="store.marketplace.state.filter.prices"
|
39
|
+
@update:radio="event => store.marketplace.state.filter.prices = event"
|
40
|
+
/>
|
41
|
+
</div>
|
42
|
+
</Dropdown>
|
43
|
+
|
44
|
+
<Dropdown
|
45
|
+
label="Delivery"
|
46
|
+
class="cursor-pointer mn-r-auto br-solid br-2px br-white pd-thin t-semi radius-extra uppercase p-medium"
|
47
|
+
:class="[
|
48
|
+
store.marketplace.state.filter.delivery.length > 0 ? 'bg-white t-black' : ''
|
49
|
+
]"
|
50
|
+
>
|
51
|
+
<div class="w-100 h-100 radius-semi o-hidden bg-black">
|
52
|
+
<Checkbox
|
53
|
+
v-for="(delivery, index) in delivery"
|
54
|
+
:label="delivery.label"
|
55
|
+
name="prices"
|
56
|
+
:value="delivery.value"
|
57
|
+
class="cursor-pointer w-100 mn-t-small bg-black t-white radius-small pd-small"
|
58
|
+
:radio="store.marketplace.state.filter.delivery"
|
59
|
+
@update:radio="event => store.marketplace.state.filter.delivery = event"
|
60
|
+
/>
|
61
|
+
</div>
|
62
|
+
</Dropdown>
|
63
|
+
<!-- Reset filter -->
|
64
|
+
<p class="t-semi radius-extra uppercase p-medium mn-r-thin">Sort by</p>
|
65
|
+
|
66
|
+
<div class="flex-stretch flex-nowrap gap-thin flex">
|
67
|
+
<Select
|
68
|
+
:options="['products','distance','popularity']"
|
69
|
+
v-model:select="store.marketplace.state.sort.param"
|
70
|
+
placeholder="Select type"
|
71
|
+
class="
|
72
|
+
bg-white
|
73
|
+
cursor-pointer
|
74
|
+
radius-small
|
75
|
+
pd-thin t-semi uppercase p-medium
|
76
|
+
w-8r
|
77
|
+
t-center
|
78
|
+
t-black
|
79
|
+
"
|
80
|
+
/>
|
81
|
+
<div
|
82
|
+
@click="() => {
|
83
|
+
if (store.marketplace.state.sort.order === 'desc') {
|
84
|
+
store.marketplace.state.sort.order = 'asc'
|
85
|
+
}
|
86
|
+
else {
|
87
|
+
store.marketplace.state.sort.order = 'desc'
|
88
|
+
}
|
89
|
+
}"
|
90
|
+
class="
|
91
|
+
bg-white
|
92
|
+
cursor-pointer
|
93
|
+
pd-thin
|
94
|
+
w-2r
|
95
|
+
t-center
|
96
|
+
t-black
|
97
|
+
radius-small
|
98
|
+
flex-justify-between
|
99
|
+
flex-column
|
100
|
+
flex
|
101
|
+
aspect-1x1
|
102
|
+
"
|
103
|
+
>
|
104
|
+
<div v-for="i in 4" :style="`height: 0.2rem; width: ${store.marketplace.state.sort.order === 'desc' ? 100 / i : 25 * i }%;`" class="transition-linear radius-small bg-black"/>
|
105
|
+
</div>
|
106
|
+
</div>
|
107
|
+
</div>
|
108
|
+
|
109
|
+
</template>
|
110
|
+
|
111
|
+
<script setup>
|
112
|
+
import { computed, onMounted, ref } from 'vue'
|
113
|
+
|
114
|
+
|
115
|
+
import Checkbox from "@pf/src/components/Checkbox/Checkbox.vue";
|
116
|
+
import Select from "@pf/src/components/Select/Select.vue";
|
117
|
+
import Dropdown from "@pf/src/components/Dropdown/Dropdown.vue";
|
118
|
+
|
119
|
+
import { useStore } from '@/store'
|
120
|
+
import { useI18n } from 'vue-i18n'
|
121
|
+
|
122
|
+
const store = useStore()
|
123
|
+
|
124
|
+
const categories = computed(() => store.categories.state.all)
|
125
|
+
|
126
|
+
const delivery = [
|
127
|
+
{ label: 'Pickup', value: 'pickup' },
|
128
|
+
{ label: 'Courier', value: 'courier' },
|
129
|
+
{ label: 'Post', value: 'post' }
|
130
|
+
]
|
131
|
+
|
132
|
+
const prices = [
|
133
|
+
{ label: 'Under 300฿', value: '<300' },
|
134
|
+
{ label: '300฿ to 600฿', value: '300-600' },
|
135
|
+
{ label: '600฿ to 1200฿', value: '600-1200' },
|
136
|
+
{ label: '$1200 and above', value: '>1200' }
|
137
|
+
]
|
138
|
+
|
139
|
+
const text = {
|
140
|
+
locale: 'en',
|
141
|
+
messages: {
|
142
|
+
en: {
|
143
|
+
categoriesTitle: 'Category',
|
144
|
+
categories: [],
|
145
|
+
sort: {
|
146
|
+
price: 'By price',
|
147
|
+
newest: 'By newest',
|
148
|
+
popularity: 'By popularity'
|
149
|
+
},
|
150
|
+
filters: {
|
151
|
+
title: 'Filters',
|
152
|
+
price: {
|
153
|
+
title: 'Price',
|
154
|
+
from: 'From',
|
155
|
+
to: 'To'
|
156
|
+
},
|
157
|
+
filters: [],
|
158
|
+
reset: 'Reset Filters'
|
159
|
+
}
|
160
|
+
},
|
161
|
+
ru: {
|
162
|
+
categoriesTitle: 'Категория',
|
163
|
+
sort: {
|
164
|
+
price: 'По цене',
|
165
|
+
newest: 'По новизне',
|
166
|
+
popularity: 'По популярности'
|
167
|
+
},
|
168
|
+
filters: {
|
169
|
+
title: 'Фильтры',
|
170
|
+
price: {
|
171
|
+
title: 'Цена',
|
172
|
+
from: 'От',
|
173
|
+
to: 'До'
|
174
|
+
},
|
175
|
+
filters: [],
|
176
|
+
reset: 'Сбросить фильтры',
|
177
|
+
}
|
178
|
+
}
|
179
|
+
}
|
180
|
+
}
|
181
|
+
|
182
|
+
const { t } = useI18n(text)
|
183
|
+
|
184
|
+
onMounted(async () => {
|
185
|
+
await store.categories.actions.fetchCategories()
|
186
|
+
|
187
|
+
store.categories.state.all.forEach( category => {
|
188
|
+
category.localization.forEach( localization => {
|
189
|
+
text.messages[localization.locale].categories.push(localization.text)
|
190
|
+
})
|
191
|
+
})
|
192
|
+
})
|
193
|
+
|
194
|
+
|
195
|
+
</script>
|
@@ -1,9 +1,5 @@
|
|
1
|
-
import { useRoute, useRouter } from 'vue-router'
|
2
|
-
|
3
1
|
import * as auth from '../../../modules/auth/store/auth'
|
4
2
|
|
5
|
-
const router = useRouter()
|
6
|
-
|
7
3
|
function requiresAuth(to, from, next) {
|
8
4
|
|
9
5
|
const isLogin = auth.state.access.status;
|
@@ -26,8 +22,6 @@ function requiresAdmin(to, from, next) {
|
|
26
22
|
next();
|
27
23
|
}
|
28
24
|
|
29
|
-
|
30
|
-
|
31
25
|
function requiresNoAuth(to, from, next) {
|
32
26
|
const isLogin = auth.state.access.status;
|
33
27
|
// to.meta.requiresNoAuth
|
@@ -1,10 +1,6 @@
|
|
1
|
-
import { useRoute, useRouter } from 'vue-router'
|
2
|
-
|
3
1
|
import * as auth from '../../../modules/auth/store/auth'
|
4
2
|
|
5
|
-
|
6
|
-
|
7
|
-
function resetUser(to, from,next) {
|
3
|
+
function resetUser(to, from, next) {
|
8
4
|
next()
|
9
5
|
auth.state.user.phone = ''
|
10
6
|
auth.state.user.email = ''
|
@@ -13,12 +9,10 @@ function resetUser(to, from,next) {
|
|
13
9
|
}
|
14
10
|
|
15
11
|
// Check state before open
|
16
|
-
function checkUser(to, from,next) {
|
17
|
-
console.log(auth.state.user)
|
12
|
+
function checkUser(to, from, next) {
|
18
13
|
if (auth.state.user.phone === '' && auth.state.user.email === '') {
|
19
14
|
next('/auth/signin')
|
20
15
|
} else {
|
21
|
-
// Allow the user to access the route
|
22
16
|
next()
|
23
17
|
}
|
24
18
|
}
|
@@ -1,13 +1,10 @@
|
|
1
1
|
<script>
|
2
2
|
import { h, ref, inject, defineComponent } from 'vue';
|
3
|
-
|
3
|
+
|
4
|
+
import IconChevronRight from '@pf/src/modules/icons/navigation/IconChevronRight.vue';
|
4
5
|
|
5
6
|
export default defineComponent({
|
6
7
|
props: {
|
7
|
-
theme: {
|
8
|
-
type: String,
|
9
|
-
default: 'black' // Значение по умолчанию
|
10
|
-
}
|
11
8
|
},
|
12
9
|
setup(props, { slots }) {
|
13
10
|
return () => {
|
@@ -65,7 +62,7 @@
|
|
65
62
|
)
|
66
63
|
]
|
67
64
|
),
|
68
|
-
h(IconChevronRight, { class: "i-medium mn-r-medium", type: "chevron"
|
65
|
+
h(IconChevronRight, { class: "i-medium mn-r-medium", type: "chevron"})
|
69
66
|
]
|
70
67
|
);
|
71
68
|
};
|
@@ -0,0 +1,166 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="pd-big mn-regular order-client-card col">
|
3
|
+
<p class="mn-regular flex-center flex-nowrap flex w-100">
|
4
|
+
<img v-if="order.status === 'Created'" class="mn-r-small" src="@/assets/icons/status/created.svg"/>
|
5
|
+
<img v-if="order.status === 'Confirmed'" class="mn-r-small" src="@/assets/icons/status/confirmed.svg"/>
|
6
|
+
<img v-if="order.status === 'Awaiting shipment'" class="mn-r-small" src="@/assets/icons/status/paid.svg"/>
|
7
|
+
<img v-if="order.status === 'In delivery'" class="mn-r-small" src="@/assets/icons/status/finished.svg"/>
|
8
|
+
<img v-if="order.status === 'Finished'" class="mn-r-small" src="@/assets/icons/status/finished.svg"/>
|
9
|
+
<span class="w-100 t-medium p-big">{{order.status}}</span>
|
10
|
+
</p>
|
11
|
+
|
12
|
+
<div class="flex-nowrap flex">
|
13
|
+
<div class="mn-r-bold pd-r-big br-right-dark w-66">
|
14
|
+
<ul class="mn-semi">
|
15
|
+
<!-- <li v-for="(product, index) in orderProducts(order.items.slice(0,2))" :key="product.id" class="shop-cart-item">
|
16
|
+
<img v-if="product.images" :src="require( `@/assets/images/products/${product.images[0]}`)">
|
17
|
+
<img v-if="!(product.images)" :src="require( `@/assets/icons/photo.svg`)">
|
18
|
+
|
19
|
+
<div class="text-left">
|
20
|
+
<p class="name">{{ product.name }}</p>
|
21
|
+
|
22
|
+
<div class="flex">
|
23
|
+
<div class="small-underline variant">
|
24
|
+
<span v-if="!product.size && !product.color" class="">One-size</span>
|
25
|
+
<span v-if="product.size" class="">{{ product.size}}</span>
|
26
|
+
<span v-if="product.color && product.size" class="">, </span>
|
27
|
+
<span v-if="product.color" class="">{{ product.color}}</span>
|
28
|
+
</div>
|
29
|
+
|
30
|
+
<p class="t-demi">$ {{product.quantity}} x {{product.price}}</p>
|
31
|
+
</div>
|
32
|
+
|
33
|
+
</div>
|
34
|
+
|
35
|
+
</li> -->
|
36
|
+
</ul>
|
37
|
+
<p class="mn-small t-medium p-big">
|
38
|
+
Adress and delivery
|
39
|
+
</p>
|
40
|
+
<p class="mn-small">
|
41
|
+
{{order.delivery.adress}}
|
42
|
+
</p>
|
43
|
+
<p v-if="order.delivery.type === 'Post'" class="w-">
|
44
|
+
You have chosen delivery using the courier service CDEK. Estimated delivery date {{DateToFormattedString(order.createdAt)}}.
|
45
|
+
</p>
|
46
|
+
|
47
|
+
<p v-if="order.delivery.type === 'Courier'" class="w-">
|
48
|
+
You have chosen delivery by courier. Estimated delivery date {{DateToFormattedString2(order.createdAt)}}.
|
49
|
+
</p>
|
50
|
+
|
51
|
+
<p v-if="order.delivery.type === 'Pickup'" class="w-">
|
52
|
+
You have chosen to receive the order in the Moscow store.
|
53
|
+
</p>
|
54
|
+
</div>
|
55
|
+
|
56
|
+
|
57
|
+
<div class="w-40">
|
58
|
+
<p class="mn-small w-100 t-medium p-big">
|
59
|
+
<span class="t-transp">Order:</span> №{{order._id.slice(0,8)}}
|
60
|
+
</p>
|
61
|
+
<p v-if="order.delivery.type === 'Post'" class="mn-medium w-100">
|
62
|
+
<span class="t-transp">Estimated shipping date:</span><br>{{DateToFormattedString(order.createdAt)}}
|
63
|
+
</p>
|
64
|
+
<p v-if="order.delivery.type === 'Courier'" class="mn-medium w-100">
|
65
|
+
<span class="t-transp">Shipping date:</span><br>{{DateToFormattedString2(order.createdAt)}}
|
66
|
+
</p>
|
67
|
+
<p v-if="order.delivery.type === 'Pickup'" class="mn-medium w-100">
|
68
|
+
<span class="t-transp">Type of delivery:</span><br>Pickup
|
69
|
+
</p>
|
70
|
+
<hr class="mn-medium">
|
71
|
+
|
72
|
+
<div :class="{'mn-semi': order.delivery.type == ''}" class="flex">
|
73
|
+
<p class="t-transp">In total</p>
|
74
|
+
<p>$ {{ cartTotalPrice }}</p>
|
75
|
+
</div>
|
76
|
+
<div v-if="order.delivery.type !== ''" class="mn-semi flex">
|
77
|
+
<p class="t-transp">Delivery</p>
|
78
|
+
<p v-if="order.delivery.type === 'Pickup'">Free</p>
|
79
|
+
<p v-if="order.delivery.type === 'Post'">$ 10</p>
|
80
|
+
<p v-if="order.delivery.type === 'Courier'">$ 20</p>
|
81
|
+
</div>
|
82
|
+
<div class="mn-semi intotal flex-bottom flex">
|
83
|
+
<p class="t-transp">In total to pay</p>
|
84
|
+
<p v-if="order.delivery.type === ''" class="p-big t-semi">$ {{ cartTotalPrice }}</p>
|
85
|
+
<p v-if="order.delivery.type === 'Pickup'" class="p-big t-semi">$ {{ cartTotalPrice}} ₽</p>
|
86
|
+
<p v-if="order.delivery.type === 'Courier'" class="p-big t-semi">$ {{ cartTotalPrice + 20 }}</p>
|
87
|
+
<p v-if="order.delivery.type === 'Post'" class="p-big t-semi">$ {{ cartTotalPrice + 10 }}</p>
|
88
|
+
</div>
|
89
|
+
<hr v-if="order.status === 'Confirmed'" class="mn-semi" >
|
90
|
+
<!-- <button
|
91
|
+
@click="requestPayment(order)"
|
92
|
+
v-if="
|
93
|
+
order.status === 'Подтвержден'
|
94
|
+
&& order.payment.type === 'Online'
|
95
|
+
&& payment.Status !== 'CONFIRMED'
|
96
|
+
&& payment.Status !== 'REFUNDED'
|
97
|
+
"
|
98
|
+
class='w-100 button'>Оплатить заказ</button> -->
|
99
|
+
<span class="t-transp" v-if="payment && payment.Status === 'CONFIRMED'">Paid</span>
|
100
|
+
</div>
|
101
|
+
</div>
|
102
|
+
</div>
|
103
|
+
|
104
|
+
</template>
|
105
|
+
|
106
|
+
|
107
|
+
<script setup="props">
|
108
|
+
import { defineProps,computed } from 'vue'
|
109
|
+
import { useRouter } from 'vue-router'
|
110
|
+
|
111
|
+
const router = useRouter()
|
112
|
+
|
113
|
+
const props = defineProps({
|
114
|
+
order: Object,
|
115
|
+
});
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
// await store.dispatch('payments/getStatus', props.order._id)
|
120
|
+
|
121
|
+
// const payment = computed(() => store.state.payments.current)
|
122
|
+
// const cartTotalPrice = computed(() => store.getters['orders/orderTotalPrice'])
|
123
|
+
|
124
|
+
function requestPayment(order) {
|
125
|
+
// store.dispatch("payments/newPayment", order);
|
126
|
+
}
|
127
|
+
|
128
|
+
function DateToFormattedString(d) {
|
129
|
+
var fixedDate = new Date(d);
|
130
|
+
var mm = (fixedDate.getMonth()+1).toString(); // getMonth() is zero-based
|
131
|
+
var dd = (fixedDate.getDate() + 6).toString();
|
132
|
+
|
133
|
+
return (dd[1]?dd:"0"+dd[0]) + '/' + (mm[1]?mm:"0"+mm[0]);
|
134
|
+
}
|
135
|
+
|
136
|
+
function DateToFormattedString2(d) {
|
137
|
+
var fixedDate = new Date(d);
|
138
|
+
var mm = (fixedDate.getMonth() + 1).toString(); // getMonth() is zero-based
|
139
|
+
var dd = (fixedDate.getDate() + 1).toString();
|
140
|
+
|
141
|
+
return (dd[1]?dd:"0"+dd[0]) + '/' + (mm[1]?mm:"0"+mm[0]);
|
142
|
+
}
|
143
|
+
|
144
|
+
// function orderProducts (items) {
|
145
|
+
// return items.map(({ id, size, color, quantity }) => {
|
146
|
+
// const product = store.state.products.all.find(product => product.id === id)
|
147
|
+
// return {
|
148
|
+
// name: product.name,
|
149
|
+
// images: product.images[0],
|
150
|
+
// color,
|
151
|
+
// size,
|
152
|
+
// price: product.price,
|
153
|
+
// id: product.id,
|
154
|
+
// quantity
|
155
|
+
// }
|
156
|
+
// })
|
157
|
+
// }
|
158
|
+
|
159
|
+
</script>
|
160
|
+
|
161
|
+
<style lang="scss" scoped>
|
162
|
+
.shop-cart-item {
|
163
|
+
&:first-of-type { padding-top: 0;}
|
164
|
+
}
|
165
|
+
|
166
|
+
</style>
|
@@ -1,45 +1,57 @@
|
|
1
1
|
<template>
|
2
|
-
<div
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
<
|
38
|
-
|
2
|
+
<div
|
3
|
+
class="gap-small pos-relative cols-1"
|
4
|
+
style="box-sizing: content-box;"
|
5
|
+
>
|
6
|
+
|
7
|
+
<div class="pos-relative w-100 gap-thin flex-stretch flex-nowrap flex">
|
8
|
+
<div class="bg-grey h-100 o-hidden pos-relative radius-small aspect-1x1"
|
9
|
+
style="flex: 1 0 auto"
|
10
|
+
>
|
11
|
+
<!-- Item Image -->
|
12
|
+
<img
|
13
|
+
class="w-100 object-fit-cover pos-absolute h-100"
|
14
|
+
v-if="product.images[0]"
|
15
|
+
:src="(FILE_SERVER_URL || '') + product.images[0]"
|
16
|
+
>
|
17
|
+
<PlaceholderImage
|
18
|
+
v-if="!product.images[0]"
|
19
|
+
class="bg-grey pos-absolute radius-small w-100 h-100"
|
20
|
+
/>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
|
24
|
+
<!-- Item Description -->
|
25
|
+
<div class="w-100 pos-relative">
|
26
|
+
<!-- Name -->
|
27
|
+
<p class="t-truncate t-medium">{{ product.name }}
|
28
|
+
<span v-if="product.size" class="t-transp">, {{ product.size}}</span>
|
29
|
+
<span v-if="typeof product.color === 'string' && product.size" class="t-transp">, </span>
|
30
|
+
<span v-if="typeof product.color === 'string' " class="t-transp">{{product.color}}</span>
|
31
|
+
</p>
|
32
|
+
<!-- Price -->
|
33
|
+
<p
|
34
|
+
class="t-main t-demi"
|
35
|
+
>
|
36
|
+
<span v-if="product.quantity">{{ product.quantity }} x </span>{{product.price}} {{returnCurrency()}}
|
37
|
+
<span v-if="product.sale" class="pd-r-small t-transp t-transp p-medium line-through price">{{(product.price / 100) * (100 + product.sale) }} {{returnCurrency()}} </span>
|
38
|
+
</p>
|
39
|
+
<!-- Quantity -->
|
40
|
+
<div v-if="editable" class="mn-t-thin gap-thin flex-nojustify flex">
|
41
|
+
<IconAdd
|
42
|
+
@click="increase(product)"
|
43
|
+
class="hover-scale-1 cursor-pointer bg-grey i-big pd-thin radius-small"
|
44
|
+
/>
|
45
|
+
<IconMinus
|
46
|
+
@click="decrease(product)"
|
47
|
+
class="hover-scale-1 cursor-pointer bg-grey i-big pd-thin radius-small"
|
48
|
+
/>
|
49
|
+
<IconDelete
|
50
|
+
@click="remove(product)"
|
51
|
+
class="hover-scale-1 cursor-pointer bg-grey i-big pd-thin radius-small"
|
52
|
+
/>
|
39
53
|
</div>
|
40
|
-
|
41
|
-
<svg fill="none" height="20" viewBox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m7.27124 0h5.45456c1.0041 0 1.8182.814027 1.8182 1.81818v.90899h2.7278c1.0042 0 1.8182.81402 1.8182 1.81818v1.81818c0 1.00415-.814 1.81818-1.8182 1.81818h-.0735l-.8363 10.00009c0 1.0042-.814 1.8182-1.8182 1.8182h-9.09087c-1.00416 0-1.81818-.814-1.81504-1.7427l-.83964-10.07559h-.07187c-1.00415 0-1.818177-.81403-1.818177-1.81818v-1.81818c0-1.00416.814027-1.81818 1.818177-1.81818h2.72668v-.90899c0-1.004153.81402-1.81818 1.81818-1.81818zm-1.81889 18.1819-.83047-10h10.75152l-.827 9.9245-.0031.0755zm-2.72612-11.81799v-1.81818h14.54547v1.81818zm10.00137-4.54571v.90909h-5.45456v-.90909z" fill="#8a8a8a" fill-rule="evenodd"/></svg>
|
42
|
-
</button>
|
54
|
+
|
43
55
|
</div>
|
44
56
|
</div>
|
45
57
|
</div>
|
@@ -51,6 +63,13 @@
|
|
51
63
|
import { computed } from 'vue'
|
52
64
|
import { useRouter } from 'vue-router'
|
53
65
|
|
66
|
+
import IconAdd from '@pf/src/modules/icons/navigation/IconAdd.vue'
|
67
|
+
import IconMinus from '@pf/src/modules/icons/navigation/IconMinus.vue'
|
68
|
+
import IconDelete from '@pf/src/modules/icons/navigation/IconDelete.vue'
|
69
|
+
|
70
|
+
|
71
|
+
import PlaceholderImage from '@pf/src/modules/icons/placeholders/PlaceholderImage.vue'
|
72
|
+
|
54
73
|
const router = useRouter()
|
55
74
|
|
56
75
|
const props = defineProps({
|
@@ -65,32 +84,6 @@
|
|
65
84
|
</script>
|
66
85
|
|
67
86
|
<style lang="scss">
|
68
|
-
.shop-cart-item {
|
69
|
-
width: 100%;
|
70
|
-
|
71
|
-
// flex: 1 0 auto;
|
72
|
-
padding-top: 1.5rem;
|
73
|
-
padding-bottom: 1.5rem;
|
74
|
-
border-bottom: 1px solid #f7f7f7 ;
|
75
|
-
|
76
|
-
.name {
|
77
|
-
overflow: hidden; /* Скрывает все, что выходит за пределы блока */
|
78
|
-
text-overflow: ellipsis; /* Добавляет многоточие, если текст обрезается */
|
79
|
-
display: -webkit-box; /* Устанавливает элемент как блочный контейнер */
|
80
|
-
-webkit-line-clamp: 1; /* Ограничивает количество строк до 3 */
|
81
|
-
-webkit-box-orient: vertical; /* Устанавливает вертикальное направление расположения строк */
|
82
|
-
}
|
83
|
-
|
84
|
-
> img {
|
85
|
-
width: 5rem;
|
86
|
-
aspect-ratio: 1 / 1;
|
87
|
-
margin-right: 1.25rem;
|
88
|
-
|
89
|
-
object-fit: cover;
|
90
|
-
|
91
|
-
border-radius: 1rem;
|
92
|
-
}
|
93
|
-
}
|
94
87
|
</style>
|
95
88
|
|
96
89
|
|
@@ -43,7 +43,7 @@
|
|
43
43
|
<div v-if="data[index]" class="flex-nowrap flex w-100">
|
44
44
|
<select
|
45
45
|
v-if="product.size"
|
46
|
-
@input="updateInputText('orders', 'current.
|
46
|
+
@input="updateInputText('orders', 'current.positions[' + index + '].size', $event)"
|
47
47
|
:value="product.size"
|
48
48
|
placeholder="hello@example.com"
|
49
49
|
class="mn-r-small mn-b-small input-text input"
|
@@ -54,7 +54,7 @@
|
|
54
54
|
<select
|
55
55
|
v-if="product.color"
|
56
56
|
|
57
|
-
@input="updateInputText('orders', 'current.
|
57
|
+
@input="updateInputText('orders', 'current.positions[' + index + '].color', $event)"
|
58
58
|
placeholder="hello@example.com"
|
59
59
|
class="mn-r-small mn-b-small input-text input"
|
60
60
|
>
|
@@ -65,7 +65,7 @@
|
|
65
65
|
|
66
66
|
|
67
67
|
<input
|
68
|
-
@input="updateInputText('orders', 'current.
|
68
|
+
@input="updateInputText('orders', 'current.positions[' + index + '].quantity', $event)"
|
69
69
|
:value="product.quantity"
|
70
70
|
placeholder="Маргарита"
|
71
71
|
class="mn-b-small input-text input"
|
@@ -135,7 +135,7 @@
|
|
135
135
|
}
|
136
136
|
|
137
137
|
function saveItemList () {
|
138
|
-
store.dispatch('orders/
|
138
|
+
store.dispatch('orders/updateOrderpositions', route.params._id)
|
139
139
|
}
|
140
140
|
|
141
141
|
|