@ozdao/martyrs 0.2.506 → 0.2.507
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/dist/auth.server.cjs +1 -1
- package/dist/auth.server.js +1 -1
- package/dist/builder.cjs +52 -60
- package/dist/builder.js +52 -60
- package/dist/chats.server.cjs +1 -1
- package/dist/chats.server.js +1 -1
- package/dist/events.server.cjs +1 -1
- package/dist/events.server.js +1 -1
- package/dist/{mailing-q7sR8gCV.cjs → mailing-Bs9ThyVZ.cjs} +1 -24
- package/dist/{mailing-C11EYWm-.js → mailing-DzlhsxCC.js} +1 -24
- package/dist/main-AWSb_d2P.cjs +11 -0
- package/dist/{main-DC__VS5b.js → main-Dq-UfO4G.js} +2562 -2477
- package/dist/martyrs/src/components/Button/{Button.vue.cjs → Button.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Button/Button.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Button/{Button.vue.js → Button.vue2.js} +2 -2
- package/dist/martyrs/src/components/Button/{Button.vue.cjs.map → Button.vue2.js.map} +1 -1
- package/dist/martyrs/src/components/Checkbox/Checkbox.vue.cjs +3 -3
- package/dist/martyrs/src/components/Checkbox/Checkbox.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Checkbox/Checkbox.vue.js +3 -3
- package/dist/martyrs/src/components/Checkbox/Checkbox.vue.js.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs +0 -93
- package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js +1 -94
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs +93 -0
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js +94 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs +14 -45
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +21 -52
- package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
- package/dist/martyrs/src/components/Field/Field.vue.cjs +14 -6
- package/dist/martyrs/src/components/Field/Field.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Field/Field.vue.js +14 -6
- package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -1
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +58 -11
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +60 -13
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js.map +1 -1
- package/dist/martyrs/src/components/PhotoViewer/PhotoViewer.vue.cjs +2 -2
- package/dist/martyrs/src/components/PhotoViewer/PhotoViewer.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/PhotoViewer/PhotoViewer.vue.js +2 -2
- package/dist/martyrs/src/components/PhotoViewer/PhotoViewer.vue.js.map +1 -1
- package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.cjs → Spoiler.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Spoiler/Spoiler.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.js → Spoiler.vue2.js} +2 -2
- package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.cjs.map → Spoiler.vue2.js.map} +1 -1
- package/dist/martyrs/src/components/Tab/{Tab.vue.cjs → Tab.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Tab/Tab.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Tab/{Tab.vue.js → Tab.vue2.js} +2 -2
- package/dist/martyrs/src/components/Tab/{Tab.vue.cjs.map → Tab.vue2.js.map} +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.cjs +42 -10
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +44 -12
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.cjs +12 -16
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +22 -26
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +13 -17
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +34 -38
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditSidebar.vue.cjs +13 -9
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditSidebar.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditSidebar.vue.js +13 -9
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditSidebar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/router/users.cjs +0 -4
- package/dist/martyrs/src/modules/auth/views/router/users.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/router/users.js +0 -4
- package/dist/martyrs/src/modules/auth/views/router/users.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs +431 -0
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js +431 -0
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js.map +1 -0
- package/dist/martyrs/src/modules/community/router/blogposts.cjs +17 -0
- package/dist/martyrs/src/modules/community/router/blogposts.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/router/blogposts.js +17 -0
- package/dist/martyrs/src/modules/community/router/blogposts.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +1 -3
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +1 -3
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +2 -2
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.cjs +4 -6
- package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.js +4 -6
- package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/Card.vue.cjs +5 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/Card.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/Card.vue.js +6 -3
- package/dist/martyrs/src/modules/globals/views/components/blocks/Card.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +2 -3
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +2 -3
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs +324 -0
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs.map +1 -0
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js +324 -0
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js.map +1 -0
- package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.js +1 -1
- package/dist/martyrs/src/modules/icons/entities/IconLock.vue.cjs +32 -0
- package/dist/martyrs/src/modules/icons/entities/IconLock.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/icons/entities/IconLock.vue.js +32 -0
- package/dist/martyrs/src/modules/icons/entities/IconLock.vue.js.map +1 -0
- package/dist/martyrs/src/modules/icons/icons.client.cjs +2 -0
- package/dist/martyrs/src/modules/icons/icons.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/icons.client.js +116 -114
- package/dist/martyrs/src/modules/icons/icons.client.js.map +1 -1
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs +5 -3
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js +117 -115
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.cjs +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.cjs +11 -36
- package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.js +11 -36
- package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/landing.client.cjs +3 -0
- package/dist/martyrs/src/modules/landing/landing.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/landing/landing.client.js +3 -0
- package/dist/martyrs/src/modules/landing/landing.client.js.map +1 -1
- package/dist/martyrs/src/modules/landing/locales/en.cjs +12 -0
- package/dist/martyrs/src/modules/landing/locales/en.cjs.map +1 -0
- package/dist/martyrs/src/modules/landing/locales/en.js +12 -0
- package/dist/martyrs/src/modules/landing/locales/en.js.map +1 -0
- package/dist/martyrs/src/modules/landing/locales/index.cjs +10 -0
- package/dist/martyrs/src/modules/landing/locales/index.cjs.map +1 -0
- package/dist/martyrs/src/modules/landing/locales/index.js +10 -0
- package/dist/martyrs/src/modules/landing/locales/index.js.map +1 -0
- package/dist/martyrs/src/modules/landing/locales/ru.cjs +12 -0
- package/dist/martyrs/src/modules/landing/locales/ru.cjs.map +1 -0
- package/dist/martyrs/src/modules/landing/locales/ru.js +12 -0
- package/dist/martyrs/src/modules/landing/locales/ru.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
- package/dist/martyrs/src/modules/music/router/music.cjs +2 -4
- package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/router/music.js +2 -4
- package/dist/martyrs/src/modules/music/router/music.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.cjs +1 -1
- package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardApplication.vue.cjs +86 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardApplication.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardApplication.vue.js +86 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardApplication.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardCustomer.vue.cjs +103 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardCustomer.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardCustomer.vue.js +103 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardCustomer.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.cjs +194 -0
- package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js +194 -0
- package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +138 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +138 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +189 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +189 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.cjs +173 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +173 -0
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.cjs +233 -0
- package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.js +233 -0
- package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.cjs +234 -0
- package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.js +234 -0
- package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +10 -9
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +10 -9
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +9 -83
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +10 -84
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.cjs +119 -0
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +119 -0
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.cjs +139 -0
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +139 -0
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +1 -3
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -3
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/locales/en.cjs +38 -0
- package/dist/martyrs/src/modules/orders/locales/en.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/locales/en.js +38 -0
- package/dist/martyrs/src/modules/orders/locales/en.js.map +1 -0
- package/dist/martyrs/src/modules/orders/locales/index.cjs +10 -0
- package/dist/martyrs/src/modules/orders/locales/index.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/locales/index.js +10 -0
- package/dist/martyrs/src/modules/orders/locales/index.js.map +1 -0
- package/dist/martyrs/src/modules/orders/locales/ru.cjs +38 -0
- package/dist/martyrs/src/modules/orders/locales/ru.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/locales/ru.js +38 -0
- package/dist/martyrs/src/modules/orders/locales/ru.js.map +1 -0
- package/dist/martyrs/src/modules/orders/orders.client.cjs +78 -3
- package/dist/martyrs/src/modules/orders/orders.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/orders.client.js +80 -5
- package/dist/martyrs/src/modules/orders/orders.client.js.map +1 -1
- package/dist/martyrs/src/modules/orders/router/applications.router.cjs +17 -0
- package/dist/martyrs/src/modules/orders/router/applications.router.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/router/applications.router.js +17 -0
- package/dist/martyrs/src/modules/orders/router/applications.router.js.map +1 -0
- package/dist/martyrs/src/modules/orders/router/customers.router.cjs +18 -0
- package/dist/martyrs/src/modules/orders/router/customers.router.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/router/customers.router.js +18 -0
- package/dist/martyrs/src/modules/orders/router/customers.router.js.map +1 -0
- package/dist/martyrs/src/modules/orders/store/applications.cjs +4 -42
- package/dist/martyrs/src/modules/orders/store/applications.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/store/applications.js +3 -41
- package/dist/martyrs/src/modules/orders/store/applications.js.map +1 -1
- package/dist/martyrs/src/modules/orders/store/models/application.cjs +20 -0
- package/dist/martyrs/src/modules/orders/store/models/application.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/store/models/application.js +20 -0
- package/dist/martyrs/src/modules/orders/store/models/application.js.map +1 -0
- package/dist/martyrs/src/modules/orders/store/models/customer.cjs +13 -1
- package/dist/martyrs/src/modules/orders/store/models/customer.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/store/models/customer.js +13 -1
- package/dist/martyrs/src/modules/orders/store/models/customer.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +16 -192
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +17 -193
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs +2 -11
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js +6 -15
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs +85 -89
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js +92 -96
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/router/organizations.cjs +4 -0
- package/dist/martyrs/src/modules/organizations/router/organizations.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/router/organizations.js +4 -0
- package/dist/martyrs/src/modules/organizations/router/organizations.js.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/Page.vue.cjs +3 -6
- package/dist/martyrs/src/modules/pages/views/components/pages/Page.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/Page.vue.js +3 -6
- package/dist/martyrs/src/modules/pages/views/components/pages/Page.vue.js.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +22 -19
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +22 -19
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +28 -19
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +28 -19
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +360 -105
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +378 -123
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +33 -3
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +34 -4
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +2 -2
- package/dist/martyrs/src/modules/products/router/products.router.cjs +15 -0
- package/dist/martyrs/src/modules/products/router/products.router.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/router/products.router.js +15 -0
- package/dist/martyrs/src/modules/products/router/products.router.js.map +1 -1
- package/dist/martyrs/src/modules/products/store/categories.cjs +25 -7
- package/dist/martyrs/src/modules/products/store/categories.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/store/categories.js +25 -7
- package/dist/martyrs/src/modules/products/store/categories.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +2 -2
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +2 -2
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs +345 -0
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js +345 -0
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js.map +1 -0
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/router/spots.cjs +17 -0
- package/dist/martyrs/src/modules/spots/router/spots.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/router/spots.js +17 -0
- package/dist/martyrs/src/modules/spots/router/spots.js.map +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +1 -1
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/notifications.server.cjs +1 -1
- package/dist/notifications.server.js +1 -1
- package/dist/orders.server.cjs +459 -201
- package/dist/orders.server.js +459 -201
- package/dist/organizations.server.cjs +1 -1
- package/dist/organizations.server.js +1 -1
- package/dist/products.server.cjs +428 -255
- package/dist/products.server.js +428 -255
- package/dist/style.css +115 -139
- package/dist/{tickets.controller-DQQcjyui.js → tickets.controller-C56OvH6v.js} +1 -1
- package/dist/{tickets.controller-D0V0gJCA.cjs → tickets.controller-DdnndM6c.cjs} +1 -1
- package/dist/wallet.server.cjs +1 -1
- package/dist/wallet.server.js +1 -1
- package/dist/{web-B1bEJ1W9.js → web-BXajFCU2.js} +1 -1
- package/dist/{web-D5i9k2Vv.cjs → web-DaBwwCQ5.cjs} +1 -1
- package/package.json +1 -1
- package/src/builder/modes/ssr.dev.js +10 -10
- package/src/builder/rspack/rspack.config.ssr.client.js +50 -50
- package/src/components/Checkbox/Checkbox.vue +3 -4
- package/src/components/Feed/Feed.old.vue +522 -0
- package/src/components/Feed/Feed.vue +4 -4
- package/src/components/Field/Field.vue +7 -1
- package/src/components/FieldBig/FieldBig.vue +62 -8
- package/src/components/PhotoViewer/PhotoViewer.vue +1 -1
- package/src/modules/STYLES.MD +198 -0
- package/src/modules/auth/views/components/pages/Profile.vue +1 -1
- package/src/modules/auth/views/components/pages/ProfileEdit.vue +42 -8
- package/src/modules/auth/views/components/pages/ProfileEditAccount.vue +9 -11
- package/src/modules/auth/views/components/pages/ProfileEditProfile.vue +9 -11
- package/src/modules/auth/views/components/pages/ProfileEditSidebar.vue +7 -4
- package/src/modules/auth/views/router/users.js +0 -4
- package/src/modules/community/components/pages/Posts.vue +444 -0
- package/src/modules/community/router/blogposts.js +15 -0
- package/src/modules/globals/views/classes/globals.websocket.js +7 -8
- package/src/modules/globals/views/components/blocks/Card.vue +2 -1
- package/src/modules/globals/views/components/layouts/Client.vue +1 -2
- package/src/modules/globals/views/components/partials/FooterAlt.vue +161 -188
- package/src/modules/globals/views/components/sections/Filters.vue +261 -121
- package/src/modules/globals/views/components/sections/filters/FilterCheckbox.vue +78 -0
- package/src/modules/globals/views/components/sections/filters/FilterDateRange.vue +177 -0
- package/src/modules/globals/views/components/sections/filters/FilterRange.vue +51 -50
- package/src/modules/icons/entities/IconLock.vue +14 -0
- package/src/modules/icons/icons.client.js +2 -1
- package/src/modules/icons/pages/IconsPage.vue +4 -2
- package/src/modules/landing/components/sections/SubscribeNewsletter.vue +11 -61
- package/src/modules/landing/landing.client.js +6 -0
- package/src/modules/landing/locales/en.js +9 -0
- package/src/modules/landing/locales/index.js +7 -0
- package/src/modules/landing/locales/ru.js +9 -0
- package/src/modules/music/components/pages/Album.vue +1 -1
- package/src/modules/music/components/pages/Playlist.vue +1 -1
- package/src/modules/music/components/pages/Track.vue +1 -1
- package/src/modules/orders/components/blocks/CardApplication.vue +74 -0
- package/src/modules/orders/components/blocks/CardCustomer.vue +90 -0
- package/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue +199 -0
- package/src/modules/orders/components/forms/FormApplicationDetails.vue +117 -0
- package/src/modules/orders/components/forms/FormCustomerDetails.vue +165 -0
- package/src/modules/orders/components/forms/FormSelectCustomer.vue +172 -0
- package/src/modules/orders/components/pages/Applications.vue +240 -0
- package/src/modules/orders/components/pages/Customers.vue +239 -0
- package/src/modules/orders/components/pages/OrderCreate.vue +2 -2
- package/src/modules/orders/components/pages/OrderCreateBackoffice.vue +4 -75
- package/src/modules/orders/components/sections/ApplicationDetails.vue +91 -0
- package/src/modules/orders/components/sections/CustomerDetails.vue +107 -0
- package/src/modules/orders/locales/en.js +35 -0
- package/src/modules/orders/locales/index.js +7 -0
- package/src/modules/orders/locales/ru.js +35 -0
- package/src/modules/orders/middlewares/applications.verifier.js +189 -0
- package/src/modules/orders/middlewares/customers.verifier.js +251 -0
- package/src/modules/orders/models/application.model.js +21 -0
- package/src/modules/orders/models/customer.model.js +26 -0
- package/src/modules/orders/orders.client.js +86 -1
- package/src/modules/orders/orders.server.js +3 -1
- package/src/modules/orders/router/applications.router.js +15 -0
- package/src/modules/orders/router/customers.router.js +17 -0
- package/src/modules/orders/routes/applications.routes.js +124 -12
- package/src/modules/orders/routes/customers.routes.js +43 -0
- package/src/modules/orders/store/applications.js +3 -159
- package/src/modules/orders/store/models/application.js +18 -0
- package/src/modules/orders/store/models/customer.js +12 -0
- package/src/modules/organizations/components/pages/Organization.new.vue +593 -0
- package/src/modules/organizations/components/pages/Organization.vue +10 -201
- package/src/modules/organizations/components/sections/DetailsTabSection.vue +2 -2
- package/src/modules/organizations/configs/navigation.organization.config.js +69 -85
- package/src/modules/organizations/router/organizations.js +5 -0
- package/src/modules/pages/views/components/pages/Page.vue +1 -1
- package/src/modules/products/TASKS.MD +157 -0
- package/src/modules/products/components/blocks/CardCategory.vue +1 -1
- package/src/modules/products/components/blocks/ProductImages.vue +1 -1
- package/src/modules/products/components/pages/Categories.vue +27 -22
- package/src/modules/products/components/pages/CategoryEdit.vue +24 -13
- package/src/modules/products/components/pages/Products.vue +414 -173
- package/src/modules/products/components/sections/ProductsRecommended.vue +46 -2
- package/src/modules/products/controllers/categories.controller.js +321 -282
- package/src/modules/products/controllers/configs/products.lookup.config.js +9 -0
- package/src/modules/products/controllers/products.controller.js +2 -1
- package/src/modules/products/controllers/queries/products.queries.js +183 -11
- package/src/modules/products/middlewares/categories.verifier.js +58 -15
- package/src/modules/products/migrations/categories-to-materialized-path.js +433 -0
- package/src/modules/products/migrations/path-to-url.js +27 -0
- package/src/modules/products/models/category.model.js +8 -23
- package/src/modules/products/router/products.router.js +12 -0
- package/src/modules/products/store/categories.js +26 -7
- package/src/modules/rents/TASK.MD +161 -0
- package/src/modules/spots/components/pages/Spots.vue +342 -0
- package/src/modules/spots/router/spots.js +15 -0
- package/src/styles/base/all.scss +2 -3
- package/src/styles/layout.scss +16 -0
- package/dist/main-w3rPUBVh.cjs +0 -11
- package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.cjs +0 -96
- package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js +0 -96
- package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js.map +0 -1
- package/dist/martyrs/src/components/Button/Button.vue.js.map +0 -1
- package/dist/martyrs/src/components/Spoiler/Spoiler.vue.js.map +0 -1
- package/dist/martyrs/src/components/Tab/Tab.vue.js.map +0 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs +0 -155
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js +0 -155
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js.map +0 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.cjs +0 -81
- package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.js +0 -81
- package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.js.map +0 -1
- package/src/modules/orders/components/sections/FormAddCustomer.vue +0 -152
- package/src/modules/orders/components/sections/FormCustomerDetails.vue +0 -67
- package/src/modules/orders/controllers/applications.controller.js +0 -122
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderCreate.vue.js","sources":["../../../../../../../src/modules/orders/components/pages/OrderCreate.vue"],"sourcesContent":["<template>\n\n<section class=\"bg-white pd-thin\">\n\n\t<!-- Ask to login -->\n\t<AskToLogin class=\"mn-b-thin\" v-if=\"auth.state.access.status === false\" /> \n\n\t<!-- Empty State -->\n\t<EmptyState \n\t\tv-if=\"shopcart.state.positions < 1\" \n\t/>\t\n\t<Succes \n\t\tv-if=\"order.status === true && shopcart.state.positions.length > 0\" \n\t\t:order=\"order\" \n\t/>\n\t<!-- Уведомления о минимальной сумме заказа и времени работы -->\n\t<div v-if=\"shopcart.state.positions.length > 0\" class=\"w-100 gap-thin cols-1 mn-b-thin\">\n\t\t<div v-if=\"!isOpen\" class=\"bg-fifth-nano pd-small radius-medium t-center\">\n\t\t\t<p class=\"t-fourth\">⚠️ This spot is currently closed. You can place an order, but it will be processed when the spot opens.</p>\n\t\t</div>\n\t\t<div v-if=\"cartTotalPrice < minOrderAmount\" class=\"bg-fourth-nano pd-small radius-medium t-center\">\n\t\t\t<p class=\"t-fourth\">⚠️ Minimum order amount is {{ formatPrice(minOrderAmount) }}. Your current total is {{ formatPrice(cartTotalPrice) }}.</p>\n\t\t</div>\n\t</div>\n\t<!-- Order form -->\n\t<div class=\"gap-small mn-b-thin cols-2\">\n\t\t<!-- Order Form -->\n\t\t<div\n\t\t\tv-if=\"orders.state.current.status !== true && shopcart.state.positions.length > 0\" \n\t\t\tclass=\"rows-1 gap-thin\"\n\t\t>\n\t\t\t<FormCustomerDetails\n\t\t\t\t:customer=\"orders.state.current.customer\"\n\t\t\t/>\n\t\t\t<FormPayment \t\n\t\t\t\tv-if=\"orders.state.current.status !== true && shopcart.state.positions.length > 0\"\n\t\t\t\t:order=\"orders.state.current\" \n\t\t\t\t:organization=\"orderOrganization[0]\" \n\t\t\t/>\n\t\t\t<FormDelivery \t\n\t\t\t\tv-if=\"orders.state.current.status !== true && shopcart.state.positions.length > 0\"\n\t\t\t\t:order=\"orders.state.current\" \n\t\t\t\t:organization=\"orderOrganization[0]\" \n\t\t\t/>\n\t\t\t\n\t\t</div>\n\n\t\t<!-- Order positions -->\n\t\t<div \n\t\t\tv-if=\"shopcart.state.positions.length > 0\" \n\t\t\tclass=\"bg-white br-solid br-light br-1px pd-medium radius-medium\"\n\t\t>\n\t\t\t<h4 class=\"font-second mn-b-thin\">Your Order</h4>\n\n\t\t\t<ul class=\"flex gap-thin flex-wrap mn-b-thin\">\n\t\t\t\t<CardOrderItem \n\t\t\t\t\tv-for=\"(product, index) in shopcart.state.positions\" \n\t\t\t\t\t:key=\"`${product._id}_${product.variant || 'no-variant'}_${index}`\" \n\t\t\t\t\t:editable=\"true\" \n\t\t\t\t\t:productId=\"product._id\"\n\t\t\t\t\t:variantId=\"product.variant\"\n\t\t\t\t\t:images=\"product.images\"\n\t\t\t\t\t:name=\"product.name\"\n\t\t\t\t\t:quantity=\"product.quantity\"\n\t\t\t\t\t:unit=\"product.unit\"\n\t\t\t\t\t:dates=\"product.date\"\n\t\t\t\t\t:listing=\"product.listing\"\n\t\t\t\t\t:price=\"product.price\"\n\t :increase=\"() => shopcart.actions.incrementItemQuantity(product._id, product.variant)\"\n\t :decrease=\"() => shopcart.actions.decrementItemQuantity(product._id, product.variant)\"\n\t :remove=\"() => shopcart.actions.removeProduct(product._id, product.variant)\"\n\t\t\t\t\t@updateRentDates=\"(productId, variantId, dates) => shopcart.actions.updateRentDates({ productId, variantId, dates })\"\n\t class=\"w-100 bg-white \"\n\t />\n\t\t\t</ul>\n\n\t\t\t\t<div \n\t\t\t\tclass=\"mn-b-thin\"\n\t\t\t>\t\n\t\t\t\t<PriceTotal \n :totalPrice=\"cartTotalPrice\"\n :deliveryRate=\"deliveryCost\"\n :currency=\"returnCurrency()\"\n :showFees=\"globals.state.options?.orders.showFees\"\n :feesRate=\"globals.state.options?.orders.feesRate || 0\"\n :showVat=\"globals.state.options?.orders.showVat\"\n :vatRate=\"globals.state.options?.orders.vatRate || 0\"\n :showDeliveryFee=\"globals.state.options?.orders.showDeliveryFee\"\n />\n\t\t\t</div>\n\t\t\t<!-- Send order -->\n\t\t <Button\n v-if=\"orders.state.current.status !== true && shopcart.state.positions.length > 0\"\n :submit=\"() => handleCreate()\"\n class=\"bg-main mn-b-small pd-small radius-big w-100 button\"\n :disabled=\"\n\t\t errorName \n\t\t || errorPhoneOrMessenger \n\t\t || errorCity \n\t\t || errorAddress \n\t\t || errorDelivery \n\t\t || errorPayment\n\t\t || isLocationLoading\n\t\t || cartTotalPrice < minOrderAmount\n\t\t \"\n >\n <span>Place an Order</span>\n </Button>\n\n\t\t <p class='mn-b-thin'>\n\t\t\t\tI agree that placing the order places me under an obligation to make a payment in accordance with <a class=\"t-semi font-second t-second\" href=\"/legal/terms-of-use\" target=\"_blank\">Terms of Use.</a>\n\t\t\t</p>\n\t\t\t<p >\n\t\t\t\t\n\t\t\t</p>\n\t\t</div>\n\n\t</div>\n\n\t\n\t\n</section>\n\n</template>\n\n\n<script setup>\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Import components\n///////////////////////////////////////////////////////////////////////////////////////////////////\nimport Button from '@martyrs/src/components/Button/Button.vue'\n// Block\nimport CardOrderItem from '@martyrs/src/modules/orders/components/blocks/CardOrderItem.vue'\n// Sections\nimport AskToLogin from '@martyrs/src/modules/orders/components/sections/AskToLogin.vue'\nimport Succes from '@martyrs/src/modules/orders/components/sections/Succes.vue'\nimport EmptyState from '@martyrs/src/modules/orders/components/sections/EmptyState.vue'\n\nimport PriceTotal from '@martyrs/src/modules/orders/components/elements/PriceTotal.vue';\n\nimport FormCustomerDetails from '@martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue'\nimport FormDelivery from '@martyrs/src/modules/orders/components/sections/FormDelivery.vue'\nimport FormPayment from '@martyrs/src/modules/orders/components/sections/FormPayment.vue'\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Import libs\n///////////////////////////////////////////////////////////////////////////////////////////////////\nimport { ref, computed, onMounted, watch } from 'vue'\nimport { useRoute,useRouter } from 'vue-router'\nimport { useGlobalMixins } from \"@martyrs/src/modules/globals/views/mixins/mixins.js\"\n\n// Store\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js';\nimport * as organizations from '@martyrs/src/modules/organizations/store/organizations.js';\nimport * as orders from '@martyrs/src/modules/orders/store/orders.js';\nimport * as users from '@martyrs/src/modules/auth/views/store/users.js';\n\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Variables and computed\n//////////////////////////////////////////////////////////////////////////////////////////////////\nconst isLocationLoading = ref(false)\n// Accessing router and store\nconst route = useRoute()\nconst router = useRouter()\nconst { returnCurrency, formatPrice } = useGlobalMixins()\n// COMPUTED\nconst order = computed(() => orders.state.current)\nconst user = computed(() => users.state.current)\n\nconst cartTotalPrice = shopcart.getters.cartTotalPrice\n\nconst deliveryCost = computed(() => {\n const type = orders.state.current.delivery.type\n const distance = orderOrganization.value[0]?.distance || 0\n const config = globals.state.options?.orders?.delivery_formula || {}\n\n return orders.getters.getDeliveryPrice(type, distance, config)\n})\n\n// Organization\nconst orderOrganization = ref({})\nconst spotOrganization = ref({})\nconst isOpen = ref(true)\n\n// Новые переменные для проверки минимальной суммы заказа и времени работы\nconst minOrderAmount = ref(0)\n\nfunction checkIsOpenNow(worktime) {\n try {\n console.log('[checkIsOpenNow] worktime:', worktime);\n\n if (\n !worktime ||\n typeof worktime !== 'object' ||\n Array.isArray(worktime) ||\n !worktime.regular\n ) {\n console.log('[checkIsOpenNow] invalid, returning true');\n return true;\n }\n\n const now = new Date();\n const currentDay = now.getDay();\n const currentTime = `${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}`;\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n\n console.log('[checkIsOpenNow] currentDay:', currentDay);\n console.log('[checkIsOpenNow] currentTime:', currentTime);\n\n const specialDay = worktime.special?.find(s => {\n const d = new Date(s.date);\n return (\n d.getFullYear() === today.getFullYear() &&\n d.getMonth() === today.getMonth() &&\n d.getDate() === today.getDate()\n );\n });\n\n if (specialDay) {\n console.log('[checkIsOpenNow] specialDay:', specialDay);\n if (!specialDay.isOpen) return false;\n return specialDay.periods?.some(p => p.open <= currentTime && p.close > currentTime);\n }\n\n const regularDay = worktime.regular.find(d => d.dayOfWeek === currentDay);\n if (!regularDay || !regularDay.isOpen) return false;\n\n return regularDay.periods?.some(p => p.open <= currentTime && p.close > currentTime);\n } catch (err) {\n console.error('[checkIsOpenNow] error:', err);\n return true;\n }\n}\n\n\nif (!globals.state.options.orders.allowUnauthenticatedOrders && !auth.state.user._id) { \n\trouter.push({name: 'Sign In'})\t\n}\n\n\norders.mutations.resetOrder()\n\nonMounted(async()=> {\n\temits('page-loading');\n\n\tisLocationLoading.value = true\n\n\tif (auth.state.user._id) {\n\t\tlet data = await users.actions.read({ _id:auth.state.user._id, user: auth.state.user._id });\n\n\t\torders.state.current.customer.profile.name = users.state.current.profile.name\n\t\torders.state.current.customer.phone = users.state.current.phone\n\t\torders.state.current.customer.phone = users.state.current.phone\n\t}\n\t\n\torderOrganization.value = await organizations.actions.read({\n\t _id: shopcart.state.organization,\n\t location: globals.state.position?.location,\n\t lookup: ['spots']\n\t})\n\t\n\t// Получаем информацию о минимальной сумме заказа и времени работы из spot\n\tif (orderOrganization.value && orderOrganization.value[0]?.spots?.length > 0) {\n\t spotOrganization.value = orderOrganization.value[0].spots[0];\n\t\tisOpen.value = checkIsOpenNow(spotOrganization.value.worktime);\n\t console.log(spotOrganization.value)\n\t minOrderAmount.value = spotOrganization.value.minorder || 0;\n\t}\n\n\n\t\n \tisLocationLoading.value = false\n emits('page-loaded');\n\n if (typeof gtag === 'function') {\n gtag('event', 'begin_checkout', {\n currency: returnCurrency(), // Замените на вашу валюту\n value: cartTotalPrice || 0,\n items: shopcart.state.positions.map(item => ({\n item_id: item.product?._id,\n item_name: item.product?.name,\n price: item.price || 0,\n quantity: item.quantity || 1,\n item_category: item.product?.category || '',\n item_brand: orderOrganization.value.profile?.name || ''\n })),\n organization: orderOrganization.value.profile?.name || '',\n location: globals.state.position?.location || 'unknown'\n });\n }\n})\n\n\nwatch(\n () => orders.state.current.delivery,\n async (newVal) => {\n if (newVal?.location) {\n \tisLocationLoading.value = true\n\n orderOrganization.value = await organizations.actions.read({\n _id: shopcart.state.organization,\n location: newVal.location,\n lookup: ['spots']\n })\n \n isLocationLoading.value = false\n }\n },\n { deep: true }\n)\n\n\n/////////////////////////////\n// Store Verification\n/////////////////////////////\nconst errorName = computed(() => {\n if (orders.state.current.customer.name?.length < 2) { return true } else { return false }\n});\n\nconst errorPhoneOrMessenger = computed(() => {\n const hasMessengerType = orders.state.current.customer.messenger?.type;\n const hasMessengerValue = orders.state.current.customer.messenger?.value?.length >\t 2;\n const hasPhone = orders.state.current.customer.number?.length > 0;\n // Ошибка, если нет ни номера телефона, ни корректного типа и значения мессенджера\n return !hasPhone && !(hasMessengerType && hasMessengerValue);\n});\n\nconst errorAddress = computed(() => {\n const type = orders.state.current.delivery.type;\n if (type === \"pickup\") {\n return !orders.state.current.delivery.spot;\n } else if (type === \"courier\" || type === \"mail\") {\n const address = orders.state.current.delivery.address;\n return !address || typeof address !== 'string' || address.length < 2;\n }\n return false;\n});\n\nconst errorDelivery = computed(() => {\n if (orders.state.current.delivery.type) {return false } else {return true } \n})\n\nconst errorPayment = computed(() => {\n if (orders.state.current.payment.type) { return false } else {return true } \n})\n/////////////////////////////\n// Methods\n/////////////////////////////\nasync function handleCreate() {\n\n\torders.state.current.status = 'created';\n\n\torders.state.current.owner = {\n\t\ttarget: orderOrganization.value[0]._id,\n\t\ttype: 'organization'\n\t}\n\n\tif (auth.state.user._id) {\n\t\torders.state.current.creator = {\n\t\t\ttarget: auth.state.user._id,\n\t\t\ttype: 'user'\n\t\t}\n\t}\n\n\tif (auth.state.user._id) {\n\t\torders.state.current.customer = {\n\t\t\ttarget: auth.state.user._id,\n\t\t\ttype: 'user'\n\t\t}\n\t}\n\n\torders.state.current.positions = shopcart.state.positions\n\n \tconst referralCode = localStorage.getItem('referalCode');\n \n if (referralCode) {\n orders.state.current.referralCode = referralCode;\n }\n\n let order = await orders.actions.create(orders.state.current);\n\n if (order) {\n\t if (typeof gtag === 'function') {\n\t gtag('event', 'purchase', {\n\t transaction_id: order._id,\n\t value: cartTotalPrice || 0,\n\t currency: returnCurrency(), // Замените на вашу валюту\n\t tax: 0, // Если есть данные о налоге\n\t shipping: deliveryCost.value, // Если есть данные о доставке\n\t items: shopcart.state.positions.map(item => ({\n\t item_id: item.product?._id,\n\t item_name: item.product?.name ,\n\t price: item.price || 0,\n\t quantity: item.quantity || 1,\n\t item_category: item.product?.category || ''\n\t })),\n\t organization: orderOrganization.value?.profile?.name,\n\t location: globals.state.position?.location || 'unknown',\n\t referral_code: referralCode || null,\n\t user_id: auth.state.user._id || 'anonymous'\n\t });\n\t }\n\t}\n\n if (order) {\n \tawait router.push({\n \t\tname: 'Order',\n \t\tparams: {\n \t\t\torder: order._id\n \t\t}\n \t})\n \t\t\n \tshopcart.actions.resetShopcart()\n\n } else {\n \talert('something wrong')\n }\n}\n</script>\n\n<style lang=\"scss\">\n\n.round-wrapper {\n\tposition: relative;\n\n\t.round {\n\t\tmargin: 0;\n\t\tmargin-right: 1rem;\n\t}\n\n\tinput:checked {\n\t\tbackground: #00ff88;\n\t}\n\n\t.round-checkmark {\n\t\tposition: absolute;\n\t\twidth: 0.5rem;\n\t\theight: 0.5rem;\n\t\tbackground: white;\n\n\t\tleft: 0.5rem;\n\t\ttop: 0.5rem;\n\n\t\topacity: 1;\n\t}\n}\n</style>"],"names":["orders.state","users.state","shopcart.getters","globals.state","orders.getters","auth.state","orders.mutations","users.actions","organizations.actions","shopcart.state","order","orders.actions","shopcart.actions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OrderCreate.vue.js","sources":["../../../../../../../src/modules/orders/components/pages/OrderCreate.vue"],"sourcesContent":["<template>\n\n<section class=\"bg-white pd-thin\">\n\n\t<!-- Ask to login -->\n\t<AskToLogin class=\"mn-b-thin\" v-if=\"auth.state.access.status === false\" /> \n\n\t<!-- Empty State -->\n\t<EmptyState \n\t\tv-if=\"shopcart.state.positions < 1\" \n\t/>\t\n\t<Succes \n\t\tv-if=\"order.status === true && shopcart.state.positions.length > 0\" \n\t\t:order=\"order\" \n\t/>\n\t<!-- Уведомления о минимальной сумме заказа и времени работы -->\n\t<div v-if=\"shopcart.state.positions.length > 0\" class=\"w-100 gap-thin cols-1 mn-b-thin\">\n\t\t<div v-if=\"!isOpen\" class=\"bg-fifth-nano pd-small radius-medium t-center\">\n\t\t\t<p class=\"t-fourth\">⚠️ This spot is currently closed. You can place an order, but it will be processed when the spot opens.</p>\n\t\t</div>\n\t\t<div v-if=\"cartTotalPrice < minOrderAmount\" class=\"bg-fourth-nano pd-small radius-medium t-center\">\n\t\t\t<p class=\"t-fourth\">⚠️ Minimum order amount is {{ formatPrice(minOrderAmount) }}. Your current total is {{ formatPrice(cartTotalPrice) }}.</p>\n\t\t</div>\n\t</div>\n\t<!-- Order form -->\n\t<div class=\"gap-small mn-b-thin cols-2\">\n\t\t<!-- Order Form -->\n\t\t<div\n\t\t\tv-if=\"orders.state.current.status !== true && shopcart.state.positions.length > 0\" \n\t\t\tclass=\"rows-1 gap-thin\"\n\t\t>\n\t\t\t<FormCustomerDetails\n\t\t\t\tv-model:customer=\"orders.state.current.customer\"\n\t\t\t/>\n\t\t\t<FormPayment \t\n\t\t\t\tv-if=\"orders.state.current.status !== true && shopcart.state.positions.length > 0\"\n\t\t\t\t:order=\"orders.state.current\" \n\t\t\t\t:organization=\"orderOrganization[0]\" \n\t\t\t/>\n\t\t\t<FormDelivery \t\n\t\t\t\tv-if=\"orders.state.current.status !== true && shopcart.state.positions.length > 0\"\n\t\t\t\t:order=\"orders.state.current\" \n\t\t\t\t:organization=\"orderOrganization[0]\" \n\t\t\t/>\n\t\t\t\n\t\t</div>\n\n\t\t<!-- Order positions -->\n\t\t<div \n\t\t\tv-if=\"shopcart.state.positions.length > 0\" \n\t\t\tclass=\"bg-white br-solid br-light br-1px pd-medium radius-medium\"\n\t\t>\n\t\t\t<h4 class=\"font-second mn-b-thin\">Your Order</h4>\n\n\t\t\t<ul class=\"flex gap-thin flex-wrap mn-b-thin\">\n\t\t\t\t<CardOrderItem \n\t\t\t\t\tv-for=\"(product, index) in shopcart.state.positions\" \n\t\t\t\t\t:key=\"`${product._id}_${product.variant || 'no-variant'}_${index}`\" \n\t\t\t\t\t:editable=\"true\" \n\t\t\t\t\t:productId=\"product._id\"\n\t\t\t\t\t:variantId=\"product.variant\"\n\t\t\t\t\t:images=\"product.images\"\n\t\t\t\t\t:name=\"product.name\"\n\t\t\t\t\t:quantity=\"product.quantity\"\n\t\t\t\t\t:unit=\"product.unit\"\n\t\t\t\t\t:dates=\"product.date\"\n\t\t\t\t\t:listing=\"product.listing\"\n\t\t\t\t\t:price=\"product.price\"\n\t :increase=\"() => shopcart.actions.incrementItemQuantity(product._id, product.variant)\"\n\t :decrease=\"() => shopcart.actions.decrementItemQuantity(product._id, product.variant)\"\n\t :remove=\"() => shopcart.actions.removeProduct(product._id, product.variant)\"\n\t\t\t\t\t@updateRentDates=\"(productId, variantId, dates) => shopcart.actions.updateRentDates({ productId, variantId, dates })\"\n\t class=\"w-100 bg-white \"\n\t />\n\t\t\t</ul>\n\n\t\t\t\t<div \n\t\t\t\tclass=\"mn-b-thin\"\n\t\t\t>\t\n\t\t\t\t<PriceTotal \n :totalPrice=\"cartTotalPrice\"\n :deliveryRate=\"deliveryCost\"\n :currency=\"returnCurrency()\"\n :showFees=\"globals.state.options?.orders.showFees\"\n :feesRate=\"globals.state.options?.orders.feesRate || 0\"\n :showVat=\"globals.state.options?.orders.showVat\"\n :vatRate=\"globals.state.options?.orders.vatRate || 0\"\n :showDeliveryFee=\"globals.state.options?.orders.showDeliveryFee\"\n />\n\t\t\t</div>\n\t\t\t<!-- Send order -->\n\t\t <Button\n v-if=\"orders.state.current.status !== true && shopcart.state.positions.length > 0\"\n :submit=\"() => handleCreate()\"\n class=\"bg-main mn-b-small pd-small radius-big w-100 button\"\n :disabled=\"\n\t\t errorName \n\t\t || errorPhoneOrMessenger \n\t\t || errorCity \n\t\t || errorAddress \n\t\t || errorDelivery \n\t\t || errorPayment\n\t\t || isLocationLoading\n\t\t || cartTotalPrice < minOrderAmount\n\t\t \"\n >\n <span>Place an Order</span>\n </Button>\n\n\t\t <p class='mn-b-thin'>\n\t\t\t\tI agree that placing the order places me under an obligation to make a payment in accordance with <a class=\"t-semi font-second t-second\" href=\"/legal/terms-of-use\" target=\"_blank\">Terms of Use.</a>\n\t\t\t</p>\n\t\t\t<p >\n\t\t\t\t\n\t\t\t</p>\n\t\t</div>\n\n\t</div>\n\n\t\n\t\n</section>\n\n</template>\n\n\n<script setup>\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Import components\n///////////////////////////////////////////////////////////////////////////////////////////////////\nimport Button from '@martyrs/src/components/Button/Button.vue'\n// Block\nimport CardOrderItem from '@martyrs/src/modules/orders/components/blocks/CardOrderItem.vue'\n// Sections\nimport AskToLogin from '@martyrs/src/modules/orders/components/sections/AskToLogin.vue'\nimport Succes from '@martyrs/src/modules/orders/components/sections/Succes.vue'\nimport EmptyState from '@martyrs/src/modules/orders/components/sections/EmptyState.vue'\n\nimport PriceTotal from '@martyrs/src/modules/orders/components/elements/PriceTotal.vue';\n\nimport FormCustomerDetails from '@martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue'\nimport FormDelivery from '@martyrs/src/modules/orders/components/sections/FormDelivery.vue'\nimport FormPayment from '@martyrs/src/modules/orders/components/sections/FormPayment.vue'\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Import libs\n///////////////////////////////////////////////////////////////////////////////////////////////////\nimport { ref, computed, onMounted, watch } from 'vue'\nimport { useRoute,useRouter } from 'vue-router'\nimport { useGlobalMixins } from \"@martyrs/src/modules/globals/views/mixins/mixins.js\"\n\n// Store\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js';\nimport * as organizations from '@martyrs/src/modules/organizations/store/organizations.js';\nimport * as orders from '@martyrs/src/modules/orders/store/orders.js';\nimport * as users from '@martyrs/src/modules/auth/views/store/users.js';\n\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Variables and computed\n//////////////////////////////////////////////////////////////////////////////////////////////////\nconst isLocationLoading = ref(false)\n// Accessing router and store\nconst route = useRoute()\nconst router = useRouter()\nconst { returnCurrency, formatPrice } = useGlobalMixins()\n// COMPUTED\nconst order = computed(() => orders.state.current)\nconst user = computed(() => users.state.current)\n\nconst cartTotalPrice = shopcart.getters.cartTotalPrice\n\nconst deliveryCost = computed(() => {\n const type = orders.state.current.delivery.type\n const distance = orderOrganization.value[0]?.distance || 0\n const config = globals.state.options?.orders?.delivery_formula || {}\n\n return orders.getters.getDeliveryPrice(type, distance, config)\n})\n\n// Organization\nconst orderOrganization = ref({})\nconst spotOrganization = ref({})\nconst isOpen = ref(true)\n\n// Новые переменные для проверки минимальной суммы заказа и времени работы\nconst minOrderAmount = ref(0)\n\nfunction checkIsOpenNow(worktime) {\n try {\n console.log('[checkIsOpenNow] worktime:', worktime);\n\n if (\n !worktime ||\n typeof worktime !== 'object' ||\n Array.isArray(worktime) ||\n !worktime.regular\n ) {\n console.log('[checkIsOpenNow] invalid, returning true');\n return true;\n }\n\n const now = new Date();\n const currentDay = now.getDay();\n const currentTime = `${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}`;\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n\n console.log('[checkIsOpenNow] currentDay:', currentDay);\n console.log('[checkIsOpenNow] currentTime:', currentTime);\n\n const specialDay = worktime.special?.find(s => {\n const d = new Date(s.date);\n return (\n d.getFullYear() === today.getFullYear() &&\n d.getMonth() === today.getMonth() &&\n d.getDate() === today.getDate()\n );\n });\n\n if (specialDay) {\n console.log('[checkIsOpenNow] specialDay:', specialDay);\n if (!specialDay.isOpen) return false;\n return specialDay.periods?.some(p => p.open <= currentTime && p.close > currentTime);\n }\n\n const regularDay = worktime.regular.find(d => d.dayOfWeek === currentDay);\n if (!regularDay || !regularDay.isOpen) return false;\n\n return regularDay.periods?.some(p => p.open <= currentTime && p.close > currentTime);\n } catch (err) {\n console.error('[checkIsOpenNow] error:', err);\n return true;\n }\n}\n\n\nif (!globals.state.options.orders.allowUnauthenticatedOrders && !auth.state.user._id) { \n\trouter.push({name: 'Sign In'})\t\n}\n\n\norders.mutations.resetOrder()\n\nonMounted(async()=> {\n\temits('page-loading');\n\n\tisLocationLoading.value = true\n\n\tif (auth.state.user._id) {\n\t\tlet data = await users.actions.read({ _id:auth.state.user._id, user: auth.state.user._id });\n\n\t\torders.state.current.customer.profile.name = users.state.current.profile.name\n\t\torders.state.current.customer.phone = users.state.current.phone\n\t\torders.state.current.customer.phone = users.state.current.phone\n\t}\n\t\n\torderOrganization.value = await organizations.actions.read({\n\t _id: shopcart.state.organization,\n\t location: globals.state.position?.location,\n\t lookup: ['spots']\n\t})\n\t\n\t// Получаем информацию о минимальной сумме заказа и времени работы из spot\n\tif (orderOrganization.value && orderOrganization.value[0]?.spots?.length > 0) {\n\t spotOrganization.value = orderOrganization.value[0].spots[0];\n\t\tisOpen.value = checkIsOpenNow(spotOrganization.value.worktime);\n\t console.log(spotOrganization.value)\n\t minOrderAmount.value = spotOrganization.value.minorder || 0;\n\t}\n\n\n\t\n \tisLocationLoading.value = false\n emits('page-loaded');\n\n if (typeof gtag === 'function') {\n gtag('event', 'begin_checkout', {\n currency: returnCurrency(), // Замените на вашу валюту\n value: cartTotalPrice || 0,\n items: shopcart.state.positions.map(item => ({\n item_id: item.product?._id,\n item_name: item.product?.name,\n price: item.price || 0,\n quantity: item.quantity || 1,\n item_category: item.product?.category || '',\n item_brand: orderOrganization.value.profile?.name || ''\n })),\n organization: orderOrganization.value.profile?.name || '',\n location: globals.state.position?.location || 'unknown'\n });\n }\n})\n\n\nwatch(\n () => orders.state.current.delivery,\n async (newVal) => {\n if (newVal?.location) {\n \tisLocationLoading.value = true\n\n orderOrganization.value = await organizations.actions.read({\n _id: shopcart.state.organization,\n location: newVal.location,\n lookup: ['spots']\n })\n \n isLocationLoading.value = false\n }\n },\n { deep: true }\n)\n\n\n/////////////////////////////\n// Store Verification\n/////////////////////////////\nconst errorName = computed(() => {\n if (orders.state.current.customer.name?.length < 2) { return true } else { return false }\n});\n\nconst errorPhoneOrMessenger = computed(() => {\n const hasMessengerType = orders.state.current.customer.messenger?.type;\n const hasMessengerValue = orders.state.current.customer.messenger?.value?.length >\t 2;\n const hasPhone = orders.state.current.customer.number?.length > 0;\n // Ошибка, если нет ни номера телефона, ни корректного типа и значения мессенджера\n return !hasPhone && !(hasMessengerType && hasMessengerValue);\n});\n\nconst errorAddress = computed(() => {\n const type = orders.state.current.delivery.type;\n if (type === \"pickup\") {\n return !orders.state.current.delivery.spot;\n } else if (type === \"courier\" || type === \"mail\") {\n const address = orders.state.current.delivery.address;\n return !address || typeof address !== 'string' || address.length < 2;\n }\n return false;\n});\n\nconst errorDelivery = computed(() => {\n if (orders.state.current.delivery.type) {return false } else {return true } \n})\n\nconst errorPayment = computed(() => {\n if (orders.state.current.payment.type) { return false } else {return true } \n})\n/////////////////////////////\n// Methods\n/////////////////////////////\nasync function handleCreate() {\n\n\torders.state.current.status = 'created';\n\n\torders.state.current.owner = {\n\t\ttarget: orderOrganization.value[0]._id,\n\t\ttype: 'organization'\n\t}\n\n\tif (auth.state.user._id) {\n\t\torders.state.current.creator = {\n\t\t\ttarget: auth.state.user._id,\n\t\t\ttype: 'user'\n\t\t}\n\t}\n\n\tif (auth.state.user._id) {\n\t\torders.state.current.customer = {\n\t\t\ttarget: auth.state.user._id,\n\t\t\ttype: 'user'\n\t\t}\n\t}\n\n\torders.state.current.positions = shopcart.state.positions\n\n \tconst referralCode = localStorage.getItem('referalCode');\n \n if (referralCode) {\n orders.state.current.referralCode = referralCode;\n }\n\n let order = await orders.actions.create(orders.state.current);\n\n if (order) {\n\t if (typeof gtag === 'function') {\n\t gtag('event', 'purchase', {\n\t transaction_id: order._id,\n\t value: cartTotalPrice || 0,\n\t currency: returnCurrency(), // Замените на вашу валюту\n\t tax: 0, // Если есть данные о налоге\n\t shipping: deliveryCost.value, // Если есть данные о доставке\n\t items: shopcart.state.positions.map(item => ({\n\t item_id: item.product?._id,\n\t item_name: item.product?.name ,\n\t price: item.price || 0,\n\t quantity: item.quantity || 1,\n\t item_category: item.product?.category || ''\n\t })),\n\t organization: orderOrganization.value?.profile?.name,\n\t location: globals.state.position?.location || 'unknown',\n\t referral_code: referralCode || null,\n\t user_id: auth.state.user._id || 'anonymous'\n\t });\n\t }\n\t}\n\n if (order) {\n \tawait router.push({\n \t\tname: 'Order',\n \t\tparams: {\n \t\t\torder: order._id\n \t\t}\n \t})\n \t\t\n \tshopcart.actions.resetShopcart()\n\n } else {\n \talert('something wrong')\n }\n}\n</script>\n\n<style lang=\"scss\">\n\n.round-wrapper {\n\tposition: relative;\n\n\t.round {\n\t\tmargin: 0;\n\t\tmargin-right: 1rem;\n\t}\n\n\tinput:checked {\n\t\tbackground: #00ff88;\n\t}\n\n\t.round-checkmark {\n\t\tposition: absolute;\n\t\twidth: 0.5rem;\n\t\theight: 0.5rem;\n\t\tbackground: white;\n\n\t\tleft: 0.5rem;\n\t\ttop: 0.5rem;\n\n\t\topacity: 1;\n\t}\n}\n</style>"],"names":["orders.state","users.state","shopcart.getters","globals.state","orders.getters","auth.state","orders.mutations","users.actions","organizations.actions","shopcart.state","order","orders.actions","shopcart.actions"],"mappings":"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"}
|
|
@@ -3,15 +3,14 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
3
3
|
const vue = require("vue");
|
|
4
4
|
const vueRouter = require("vue-router");
|
|
5
5
|
;/* empty css */
|
|
6
|
-
const Button = require("../../../../components/Button/Button.
|
|
7
|
-
const Tab = require("../../../../components/Tab/Tab.
|
|
6
|
+
const Button = require("../../../../components/Button/Button.vue2.cjs");
|
|
7
|
+
const Tab = require("../../../../components/Tab/Tab.vue2.cjs");
|
|
8
8
|
const Popup = require("../../../../components/Popup/Popup.vue.cjs");
|
|
9
9
|
const Block = require("../../../../components/Block/Block.vue.cjs");
|
|
10
10
|
const Feed = require("../../../../components/Feed/Feed.vue.cjs");
|
|
11
11
|
const CardOrderItem = require("../blocks/CardOrderItem.vue.cjs");
|
|
12
12
|
const mixins = require("../../../globals/views/mixins/mixins.cjs");
|
|
13
|
-
const
|
|
14
|
-
const FormAddCustomer = require("../sections/FormAddCustomer.vue.cjs");
|
|
13
|
+
const FormSelectCustomer = require("../forms/FormSelectCustomer.vue.cjs");
|
|
15
14
|
const FormDelivery = require("../sections/FormDelivery.vue.cjs");
|
|
16
15
|
const FormPayment = require("../sections/FormPayment.vue.cjs");
|
|
17
16
|
const globals = require("../../../globals/views/store/globals.cjs");
|
|
@@ -20,7 +19,7 @@ const orders = require("../../store/orders.cjs");
|
|
|
20
19
|
const organizations = require("../../../organizations/store/organizations.cjs");
|
|
21
20
|
const products = require("../../../products/store/products.cjs");
|
|
22
21
|
const variants_store = require("../../../products/store/variants.store.cjs");
|
|
23
|
-
|
|
22
|
+
require("../../store/customers.store.cjs");
|
|
24
23
|
;/* empty css */
|
|
25
24
|
const _hoisted_1 = { class: "flex flex-column pd-thin" };
|
|
26
25
|
const _hoisted_2 = { class: "flex-v-center flex-nowrap flex" };
|
|
@@ -124,13 +123,6 @@ const _sfc_main = {
|
|
|
124
123
|
console.error("Error adding variant to order:", error);
|
|
125
124
|
}
|
|
126
125
|
}
|
|
127
|
-
const isOpenCustomerPopup = vue.ref(false);
|
|
128
|
-
function openCustomerPopup() {
|
|
129
|
-
isOpenCustomerPopup.value = true;
|
|
130
|
-
}
|
|
131
|
-
function closeCustomerPopup() {
|
|
132
|
-
isOpenCustomerPopup.value = false;
|
|
133
|
-
}
|
|
134
126
|
function incrementOrderItemQuantity(productId, variantId) {
|
|
135
127
|
const orderItem = orders.state.current.positions.find(
|
|
136
128
|
(item) => item._id === productId && item.variant === variantId
|
|
@@ -370,67 +362,12 @@ const _sfc_main = {
|
|
|
370
362
|
]),
|
|
371
363
|
_: 1
|
|
372
364
|
}, 8, ["actions"])) : vue.createCommentVNode("", true),
|
|
373
|
-
tabOrderCreate.value === "customer" ? (vue.openBlock(), vue.createBlock(
|
|
365
|
+
tabOrderCreate.value === "customer" ? (vue.openBlock(), vue.createBlock(FormSelectCustomer.default, {
|
|
374
366
|
key: 1,
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
function: () => openCustomerPopup()
|
|
380
|
-
}]
|
|
381
|
-
}, {
|
|
382
|
-
default: vue.withCtx(() => [
|
|
383
|
-
orders.state.current.customer._id ? (vue.openBlock(), vue.createBlock(CardUser.default, {
|
|
384
|
-
key: 0,
|
|
385
|
-
user: orders.state.current.customer,
|
|
386
|
-
photo: orders.state.current.customer.profile.photo,
|
|
387
|
-
name: orders.state.current.customer.profile.name || orders.state.current.customer.phone || orders.state.current.customer.email,
|
|
388
|
-
onClick: _cache[2] || (_cache[2] = () => {
|
|
389
|
-
orders.mutations.resetCustomer(orders.state.current.customer);
|
|
390
|
-
}),
|
|
391
|
-
class: "bg-white pd-thin h-4r radius-medium w-100 mn-b-thin"
|
|
392
|
-
}, null, 8, ["user", "photo", "name"])) : (vue.openBlock(), vue.createBlock(Feed.default, {
|
|
393
|
-
key: 1,
|
|
394
|
-
search: {
|
|
395
|
-
placeholder: "Search customer...",
|
|
396
|
-
class: "bg-white mn-b-thin"
|
|
397
|
-
},
|
|
398
|
-
states: {
|
|
399
|
-
empty: {
|
|
400
|
-
title: "No Products Found",
|
|
401
|
-
description: "Currently, there are no such products available."
|
|
402
|
-
}
|
|
403
|
-
},
|
|
404
|
-
store: {
|
|
405
|
-
read: (options) => vue.unref(customers_store.default).read(options),
|
|
406
|
-
state: null
|
|
407
|
-
},
|
|
408
|
-
options: {
|
|
409
|
-
owner: vue.unref(route).params._id
|
|
410
|
-
},
|
|
411
|
-
class: "bg-light h-max-20r o-scroll"
|
|
412
|
-
}, {
|
|
413
|
-
default: vue.withCtx(({
|
|
414
|
-
items
|
|
415
|
-
}) => [
|
|
416
|
-
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(items, (user, index) => {
|
|
417
|
-
return vue.openBlock(), vue.createBlock(CardUser.default, {
|
|
418
|
-
key: user._id,
|
|
419
|
-
user,
|
|
420
|
-
photo: user.profile.photo,
|
|
421
|
-
name: user.profile.name || user.phone || user.email,
|
|
422
|
-
onClick: () => {
|
|
423
|
-
orders.state.current.customer = user;
|
|
424
|
-
},
|
|
425
|
-
class: "bg-white pd-thin h-4r radius-medium w-100 mn-b-thin"
|
|
426
|
-
}, null, 8, ["user", "photo", "name", "onClick"]);
|
|
427
|
-
}), 128))
|
|
428
|
-
]),
|
|
429
|
-
_: 1
|
|
430
|
-
}, 8, ["store", "options"]))
|
|
431
|
-
]),
|
|
432
|
-
_: 1
|
|
433
|
-
}, 8, ["actions"])) : vue.createCommentVNode("", true),
|
|
367
|
+
customer: orders.state.current.customer,
|
|
368
|
+
"onUpdate:customer": _cache[2] || (_cache[2] = ($event) => orders.state.current.customer = $event),
|
|
369
|
+
class: "mn-b-semi"
|
|
370
|
+
}, null, 8, ["customer"])) : vue.createCommentVNode("", true),
|
|
434
371
|
tabOrderCreate.value === "delivery" ? (vue.openBlock(), vue.createBlock(FormDelivery.default, {
|
|
435
372
|
key: 2,
|
|
436
373
|
order: orders.state.current,
|
|
@@ -441,17 +378,6 @@ const _sfc_main = {
|
|
|
441
378
|
order: orders.state.current,
|
|
442
379
|
organization: orderOrganization.value[0]
|
|
443
380
|
}, null, 8, ["order", "organization"])) : vue.createCommentVNode("", true),
|
|
444
|
-
vue.createVNode(Popup.default, {
|
|
445
|
-
title: "Add customer",
|
|
446
|
-
onClosePopup: closeCustomerPopup,
|
|
447
|
-
isPopupOpen: isOpenCustomerPopup.value,
|
|
448
|
-
class: vue.normalizeClass("bg-white w-min-30r w-max-30r radius-big pd-medium")
|
|
449
|
-
}, {
|
|
450
|
-
default: vue.withCtx(() => [
|
|
451
|
-
vue.createVNode(FormAddCustomer.default, { onCallbackCustomer: closeCustomerPopup })
|
|
452
|
-
]),
|
|
453
|
-
_: 1
|
|
454
|
-
}, 8, ["isPopupOpen"]),
|
|
455
381
|
vue.createVNode(Block.default, { class: "mn-b-semi" }, {
|
|
456
382
|
default: vue.withCtx(() => [
|
|
457
383
|
vue.createElementVNode("div", _hoisted_12, [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderCreateBackoffice.vue.cjs","sources":["../../../../../../../src/modules/orders/components/pages/OrderCreateBackoffice.vue"],"sourcesContent":["<template>\n <div class=\"flex flex-column pd-thin\">\n <Block class=\"mn-b-thin\">\n <header class=\"flex-v-center flex-nowrap flex\">\n <h2 class=\"mn-r-auto\">Create Order</h2>\n <Button \n :submit=\"onSubmit\"\n :callback=\"redirectTo\"\n class=\"pd-small radius-big bg-main t-black uppercase t-medium\"\n >\n Add Order \n </Button>\n </header>\n </Block>\n\n <Tab \n v-model:selected=\"tabOrderCreate\"\n :tabs=\"[\n {name: 'Positions', value: 'positions'},\n {name: 'Customer', value: 'customer'},\n {name: 'Delivery', value: 'delivery'},\n {name: 'Payment', value: 'payment'}\n ]\"\n class=\"t-medium radius-medium bg-light mn-b-small\"\n />\n\n <Popup \n @close-popup=\"closeProductsPopup\" \n :isPopupOpen=\"isOpenProductsPopup\"\n class=\"bg-white flex flex-column radius-big pd-medium pos-relative\"\n >\n\n <h3 class=\"mn-b-small\">Add to order</h3>\n\n <div class=\"bg-light h-max-100 mn-b-thin o-scroll pd-medium radius-big\">\n <Feed\n :showLoadMore=\"false\"\n :search=\"{\n placeholder: 'Search products...',\n class: 'bg-white mn-b-thin'\n }\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no such products available.'\n },\n skeleton: {\n hide: true\n }\n }\"\n :store=\"{\n read: (options) => products.actions.read(options),\n state: null\n }\"\n :options=\"{\n owner: route.params._id\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"\"\n >\n <CardOrderItem\n v-for=\"(product, index) in items\" \n :key=\"`${product._id}_${index}`\"\n :editable=\"false\" \n :productId=\"product._id\"\n :images=\"product.images\"\n :name=\"product.name\"\n @click=\"() => selectProduct(product)\"\n class=\"bg-white pd-thin radius-medium w-100 mn-b-thin\"\n />\n </Feed>\n </div>\n </Popup>\n\n <!-- Popup for selecting variant of the product -->\n <Popup \n title=\"Select variant\" \n @close-popup=\"closeVariantsPopup\" \n :isPopupOpen=\"isVariantsPopupOpen\"\n class=\"bg-white w-100 w-max-30r radius-medium pd-medium\"\n >\n <Feed\n :store=\"variants\"\n :options=\"{\n product: selectedProduct?._id,\n }\"\n :skeleton=\"{\n structure: [\n { block: 'text', size: 'small' },\n { block: 'text', size: 'medium' },\n { block: 'text', size: 'small' }\n ]\n }\"\n :states=\"{\n empty: {\n title: 'No variants',\n description: 'Create your first variant'\n }\n }\"\n v-slot=\"{ items }\"\n >\n <div class=\"gap-thin flex flex-column\">\n <div \n v-for=\"(variant, index) in items\" \n :key=\"index\"\n @click=\"addVariantToOrder(variant)\"\n class=\"w-100 cursor-pointer hover-scale-1 bg-light pd-small radius-small flex-v-center flex-nowrap flex gap-thin\"\n >\n <div v-if=\"variant.images && variant.images.length\" class=\"aspect-1x1 h-3r radius-small o-hidden\">\n <img \n :src=\"(FILE_SERVER_URL || '') + variant.images[0]\" \n class=\"w-100 h-100 object-fit-cover\"\n />\n </div>\n <div>\n <p class=\"t-medium\">{{ variant.name || 'Default variant' }}</p>\n <p v-if=\"variant.attributes && variant.attributes.length\" class=\"t-small t-transp\">\n {{ variant.attributes.map(attr => `${attr.name}: ${attr.value}`).join(', ') }}\n </p>\n </div>\n <p class=\"mn-l-auto\">{{ formatPrice(variant.price || variant.cost) }}</p>\n </div>\n </div>\n </Feed>\n </Popup>\n\n <Block\n v-if=\"tabOrderCreate === 'positions'\"\n title=\"Positions\"\n :actions=\"[{\n label: '+',\n function: () => openProductsPopup()\n }]\"\n class=\"mn-b-small\"\n >\n <span \n v-if=\"orders.state.current.positions.length === 0\" \n class=\"w-100\"\n >\n No positions added yet\n </span> \n\n <CardOrderItem\n v-for=\"(product, index) in orders.state.current.positions\" \n :key=\"`${product._id}_${product.variant || 'no-variant'}_${index}`\"\n :editable=\"true\" \n :productId=\"product._id\"\n :variantId=\"product.variant\"\n :images=\"product.images\"\n :name=\"product.name\"\n :quantity=\"product.quantity\"\n :unit=\"product.unit\"\n :dates=\"product.date\"\n :listing=\"product.listing\"\n :price=\"product.price\"\n :increase=\"() => incrementOrderItemQuantity(product._id, product.variant)\"\n :decrease=\"() => decrementOrderItemQuantity(product._id, product.variant)\"\n :remove=\"() => removeOrderItem(product._id, product.variant)\"\n @updateRentDates=\"(productId, variantId, dates) => updateOrderRentDates(productId, variantId, dates)\"\n class=\"mn-b-thin pd-thin radius-medium bg-white\"\n /> \n </Block>\n\n <Block\n v-if=\"tabOrderCreate === 'customer'\"\n title=\"Customer\"\n class=\"mn-b-semi\"\n :actions=\"[{\n label: '+',\n function: () => openCustomerPopup()\n }]\"\n >\n <CardUser\n v-if=\"orders.state.current.customer._id\"\n :user=\"orders.state.current.customer\"\n :photo=\"orders.state.current.customer.profile.photo\"\n :name=\"orders.state.current.customer.profile.name || orders.state.current.customer.phone || orders.state.current.customer.email\"\n @click=\"() => { \n orders.mutations.resetCustomer(orders.state.current.customer)\n }\"\n class=\"bg-white pd-thin h-4r radius-medium w-100 mn-b-thin\"\n />\n <Feed\n v-else\n :search=\"{\n placeholder: 'Search customer...',\n class: 'bg-white mn-b-thin'\n }\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no such products available.'\n }\n }\"\n :store=\"{\n read: (options) => customers.read(options),\n state: null\n }\"\n :options=\"{\n owner: route.params._id\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"bg-light h-max-20r o-scroll\"\n >\n <CardUser\n v-for=\"(user, index) in items\" \n :key=\"user._id\"\n :user=\"user\"\n :photo=\"user.profile.photo\"\n :name=\"user.profile.name || user.phone || user.email\"\n @click=\"() => { \n orders.state.current.customer = user\n }\"\n class=\"bg-white pd-thin h-4r radius-medium w-100 mn-b-thin\"\n />\n </Feed>\n \n </Block>\n\n <FormDelivery \n v-if=\"tabOrderCreate === 'delivery'\" \n :order=\"orders.state.current\"\n :organization=\"orderOrganization[0]\" \n />\n\n <FormPayment \n v-if=\"tabOrderCreate === 'payment'\"\n :order=\"orders.state.current\" \n :organization=\"orderOrganization[0]\" \n />\n\n <Popup \n title=\"Add customer\" \n @close-popup=\"closeCustomerPopup\" \n :isPopupOpen=\"isOpenCustomerPopup\"\n :class=\"'bg-white w-min-30r w-max-30r radius-big pd-medium'\"\n >\n <FormAddCustomer \n @callbackCustomer=\"closeCustomerPopup\"\n />\n </Popup>\n\n <Block\n class=\"mn-b-semi\"\n >\n <div class=\"h3 flex\">\n <span class=\"mn-r-auto t-transp\">In total</span>\n <span>{{ cartTotalPrice }} {{returnCurrency()}} </span >\n </div>\n </Block>\n</div>\n\n\n</template>\n\n<script setup=\"props\">\n import { computed, ref, defineProps, onMounted, reactive, toRefs, watch, getCurrentInstance } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n\n\n import Field from '@martyrs/src/components/Field/Field.vue'\n import Button from \"@martyrs/src/components/Button/Button.vue\"; \n import Tab from '@martyrs/src/components/Tab/Tab.vue'\n import Popup from '@martyrs/src/components/Popup/Popup.vue';\n\timport Block from '@martyrs/src/components/Block/Block.vue';\n import Feed from '@martyrs/src/components/Feed/Feed.vue'\n\n import CardOrderItem from '@martyrs/src/modules/orders/components/blocks/CardOrderItem.vue'\n import CardPosition from '@martyrs/src/modules/products/components/blocks/CardPosition.vue';\n import CardUser from '@martyrs/src/modules/auth/views/components/blocks/CardUser.vue'\n\n import BlockSearch from '@martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue'\n\n import FormAddCustomer from '@martyrs/src/modules/orders/components/sections/FormAddCustomer.vue'\n import FormDelivery from '@martyrs/src/modules/orders/components/sections/FormDelivery.vue'\n import FormPayment from '@martyrs/src/modules/orders/components/sections/FormPayment.vue'\n\n // Import your store\n import * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n import * as orders from '@martyrs/src/modules/orders/store/orders.js';\n import * as organizations from '@martyrs/src/modules/organizations/store/organizations.js';\n import * as products from '@martyrs/src/modules/products/store/products.js';\n import variants from '@martyrs/src/modules/products/store/variants.store.js';\n\n import customers from '@martyrs/src/modules/orders/store/customers.store';\n \n import { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';\n\t\n // Accessing router\n const route = useRoute()\n const router = useRouter()\n const { proxy } = getCurrentInstance()\n const { formatPrice } = useGlobalMixins()\n\n orders.mutations.resetOrder(orders.state.current)\n\n let cartTotalPrice = computed(() => {\n return Number(orders.state.current.positions.reduce((total, product) => {\n if (product.listing === 'rent' && product.date?.start && product.date?.end) {\n const start = new Date(product.date.start);\n const end = new Date(product.date.end);\n const days = Math.ceil(Math.abs(end - start) / (1000 * 60 * 60 * 24)) + 1;\n return total + product.price * product.quantity * days;\n } else {\n return total + product.price * product.quantity;\n }\n }, 0));\n })\n\n // Tab\n const tabOrderCreate = ref('positions')\n\n // Popup\n const isOpenProductsPopup = ref(false);\n const isVariantsPopupOpen = ref(false);\n const selectedProduct = ref(null);\n\n function openProductsPopup() {\n isOpenProductsPopup.value = true;\n }\n\n function closeProductsPopup() {\n isOpenProductsPopup.value = false;\n }\n\n function closeVariantsPopup() {\n isVariantsPopupOpen.value = false;\n selectedProduct.value = null;\n }\n\n function selectProduct(product) {\n selectedProduct.value = product;\n closeProductsPopup();\n \n // If product has only one variant, add it directly without showing popup\n if (product.variants && product.variants.length === 1) {\n addVariantToOrder(product.variants[0]);\n return;\n }\n \n // If product has multiple variants or no variants defined, show popup\n isVariantsPopupOpen.value = true;\n }\n\n function formatProductName(product, variant) {\n if (!variant || product.variants?.length === 1 && !(variant.attributes?.length))\n return product.name;\n\n const attrs = variant.attributes?.map(a => a.value).filter(Boolean);\n return attrs?.length\n ? `${product.name} / ${attrs.join(' / ')}`\n : `${product.name} / ${variant.name}`;\n }\n\n async function addVariantToOrder(variant) {\n try {\n let selectedDates = null;\n \n // Если товар для аренды, сначала выбираем даты\n if (selectedProduct.value.listing === 'rent') {\n selectedDates = await proxy.$dateSelector(\n selectedProduct.value._id,\n variant._id,\n 1,\n variant.price || selectedProduct.value.price\n );\n \n if (!selectedDates) {\n // Если отменили выбор дат, возвращаемся к выбору вариантов\n return;\n }\n }\n \n const position = {\n _id: selectedProduct.value._id,\n images: variant.images?.length > 0 ? variant.images : selectedProduct.value.images,\n name: formatProductName(selectedProduct.value, variant),\n listing: selectedProduct.value.listing,\n price: variant.price || selectedProduct.value.price,\n quantity: 1,\n unit: variant.unit || selectedProduct.value.unit,\n date: selectedDates,\n variant: variant._id,\n org_id: route.params._id\n };\n \n globals.actions.add(orders.state.current.positions, position);\n closeVariantsPopup();\n } catch (error) {\n console.error('Error adding variant to order:', error);\n }\n }\n\n const isOpenCustomerPopup = ref(false);\n\n function openCustomerPopup() {\n isOpenCustomerPopup.value = true;\n }\n\n function closeCustomerPopup() {\n isOpenCustomerPopup.value = false;\n }\n\n // Функции управления позициями заказа\n function incrementOrderItemQuantity(productId, variantId) {\n const orderItem = orders.state.current.positions.find(item => \n item._id === productId && item.variant === variantId\n );\n \n if (orderItem) {\n orderItem.quantity++;\n }\n }\n\n function decrementOrderItemQuantity(productId, variantId) {\n const orderItem = orders.state.current.positions.find(item => \n item._id === productId && item.variant === variantId\n );\n \n if (orderItem) {\n orderItem.quantity--;\n \n if (orderItem.quantity < 1) {\n removeOrderItem(productId, variantId);\n }\n }\n }\n\n function removeOrderItem(productId, variantId) {\n const itemIndex = orders.state.current.positions.findIndex(item => \n item._id === productId && item.variant === variantId\n );\n \n if (itemIndex > -1) {\n orders.state.current.positions.splice(itemIndex, 1);\n }\n }\n\n function updateOrderRentDates(productId, variantId, dates) {\n const orderItem = orders.state.current.positions.find(item => \n item._id === productId && item.variant === variantId\n );\n \n if (orderItem) {\n orderItem.date = dates;\n }\n }\n\n // Data\n let order = ref(null)\n\n async function onSubmit() {\n\n orders.state.current.creator = {\n type: 'User',\n target: auth.state.user._id\n }\n\n orders.state.current.owner = {\n type: 'Organization',\n target: route.params._id,\n }\n\n orders.state.current.customer = {\n type: 'Customer',\n target: orders.state.current.customer._id || null,\n }\n\n order.value = await orders.actions.create(orders.state.current)\n }\n\n function redirectTo () {\n router.push({\n name: route.meta.context === 'backoffice' ? 'BackofficeOrderEdit' : 'OrganizationOrderEdit',\n params: { \n order: order.value._id,\n _id: route.params._id\n } \n })\n }\n\n const orderOrganization = ref({})\n\n\n\n onMounted(async() => {\n\n orderOrganization.value = await organizations.actions.read({\n _id: route.params._id,\n lookup: ['spots']\n })\n\n // await orders.actions.fetchOrder(route.params.id) // Implement this action in your store\n\n // order.value = orders.state.current\n })\n\n</script>\n\n\n<style lang=\"scss\">\n\n.vue-select {\n width: inherit;\n\n margin-right: 1rem;\n}\n.vue-select-header {\n height: 3rem;\n}\n</style>\n"],"names":["useRoute","useRouter","getCurrentInstance","useGlobalMixins","orders.mutations","orders.state","computed","ref","globals.actions","auth.state","orders.actions","onMounted","organizations.actions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsSE,UAAM,QAAQA,UAAAA,SAAQ;AACtB,UAAM,SAASC,UAAAA,UAAS;AACxB,UAAM,EAAE,MAAK,IAAKC,IAAAA,mBAAkB;AACpC,UAAM,EAAE,YAAW,IAAKC,OAAAA,gBAAe;AAEtCC,qBAAiB,WAAWC,OAAAA,MAAa,OAAO;AAEjD,QAAI,iBAAiBC,IAAAA,SAAS,MAAM;AAClC,aAAO,OAAOD,OAAAA,MAAa,QAAQ,UAAU,OAAO,CAAC,OAAO,YAAY;AACtE,YAAI,QAAQ,YAAY,UAAU,QAAQ,MAAM,SAAS,QAAQ,MAAM,KAAK;AAC1E,gBAAM,QAAQ,IAAI,KAAK,QAAQ,KAAK,KAAK;AACzC,gBAAM,MAAM,IAAI,KAAK,QAAQ,KAAK,GAAG;AACrC,gBAAM,OAAO,KAAK,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,MAAO,KAAK,KAAK,GAAG,IAAI;AACxE,iBAAO,QAAQ,QAAQ,QAAQ,QAAQ,WAAW;AAAA,QACpD,OAAO;AACL,iBAAO,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,QACzC;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,IACP,CAAC;AAGD,UAAM,iBAAiBE,IAAAA,IAAI,WAAW;AAGtC,UAAM,sBAAsBA,IAAAA,IAAI,KAAK;AACrC,UAAM,sBAAsBA,IAAAA,IAAI,KAAK;AACrC,UAAM,kBAAkBA,IAAAA,IAAI,IAAI;AAEhC,aAAS,oBAAoB;AAC3B,0BAAoB,QAAQ;AAAA,IAC9B;AAEA,aAAS,qBAAqB;AAC5B,0BAAoB,QAAQ;AAAA,IAC9B;AAEA,aAAS,qBAAqB;AAC5B,0BAAoB,QAAQ;AAC5B,sBAAgB,QAAQ;AAAA,IAC1B;AAEA,aAAS,cAAc,SAAS;AAC9B,sBAAgB,QAAQ;AACxB,yBAAkB;AAGlB,UAAI,QAAQ,YAAY,QAAQ,SAAS,WAAW,GAAG;AACrD,0BAAkB,QAAQ,SAAS,CAAC,CAAC;AACrC;AAAA,MACF;AAGA,0BAAoB,QAAQ;AAAA,IAC9B;AAEA,aAAS,kBAAkB,SAAS,SAAS;AAC3C,UAAI,CAAC,WAAW,QAAQ,UAAU,WAAW,KAAK,CAAE,QAAQ,YAAY;AACtE,eAAO,QAAQ;AAEjB,YAAM,QAAQ,QAAQ,YAAY,IAAI,OAAK,EAAE,KAAK,EAAE,OAAO,OAAO;AAClE,aAAO,OAAO,SACV,GAAG,QAAQ,IAAI,MAAM,MAAM,KAAK,KAAK,CAAC,KACtC,GAAG,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAAA,IACvC;AAEA,mBAAe,kBAAkB,SAAS;AACxC,UAAI;AACF,YAAI,gBAAgB;AAGpB,YAAI,gBAAgB,MAAM,YAAY,QAAQ;AAC5C,0BAAgB,MAAM,MAAM;AAAA,YAC1B,gBAAgB,MAAM;AAAA,YACtB,QAAQ;AAAA,YACR;AAAA,YACA,QAAQ,SAAS,gBAAgB,MAAM;AAAA,UACjD;AAEQ,cAAI,CAAC,eAAe;AAElB;AAAA,UACF;AAAA,QACF;AAEA,cAAM,WAAW;AAAA,UACf,KAAK,gBAAgB,MAAM;AAAA,UAC3B,QAAQ,QAAQ,QAAQ,SAAS,IAAI,QAAQ,SAAS,gBAAgB,MAAM;AAAA,UAC5E,MAAM,kBAAkB,gBAAgB,OAAO,OAAO;AAAA,UACtD,SAAS,gBAAgB,MAAM;AAAA,UAC/B,OAAO,QAAQ,SAAS,gBAAgB,MAAM;AAAA,UAC9C,UAAU;AAAA,UACV,MAAM,QAAQ,QAAQ,gBAAgB,MAAM;AAAA,UAC5C,MAAM;AAAA,UACN,SAAS,QAAQ;AAAA,UACjB,QAAQ,MAAM,OAAO;AAAA,QAC7B;AAEMC,gBAAAA,QAAgB,IAAIH,OAAAA,MAAa,QAAQ,WAAW,QAAQ;AAC5D,2BAAkB;AAAA,MACpB,SAAS,OAAO;AACd,gBAAQ,MAAM,kCAAkC,KAAK;AAAA,MACvD;AAAA,IACF;AAEA,UAAM,sBAAsBE,IAAAA,IAAI,KAAK;AAErC,aAAS,oBAAoB;AAC3B,0BAAoB,QAAQ;AAAA,IAC9B;AAEA,aAAS,qBAAqB;AAC5B,0BAAoB,QAAQ;AAAA,IAC9B;AAGA,aAAS,2BAA2B,WAAW,WAAW;AACxD,YAAM,YAAYF,OAAAA,MAAa,QAAQ,UAAU;AAAA,QAAK,UACpD,KAAK,QAAQ,aAAa,KAAK,YAAY;AAAA,MACjD;AAEI,UAAI,WAAW;AACb,kBAAU;AAAA,MACZ;AAAA,IACF;AAEA,aAAS,2BAA2B,WAAW,WAAW;AACxD,YAAM,YAAYA,OAAAA,MAAa,QAAQ,UAAU;AAAA,QAAK,UACpD,KAAK,QAAQ,aAAa,KAAK,YAAY;AAAA,MACjD;AAEI,UAAI,WAAW;AACb,kBAAU;AAEV,YAAI,UAAU,WAAW,GAAG;AAC1B,0BAAgB,WAAW,SAAS;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAEA,aAAS,gBAAgB,WAAW,WAAW;AAC7C,YAAM,YAAYA,OAAAA,MAAa,QAAQ,UAAU;AAAA,QAAU,UACzD,KAAK,QAAQ,aAAa,KAAK,YAAY;AAAA,MACjD;AAEI,UAAI,YAAY,IAAI;AAClBA,eAAAA,MAAa,QAAQ,UAAU,OAAO,WAAW,CAAC;AAAA,MACpD;AAAA,IACF;AAEA,aAAS,qBAAqB,WAAW,WAAW,OAAO;AACzD,YAAM,YAAYA,OAAAA,MAAa,QAAQ,UAAU;AAAA,QAAK,UACpD,KAAK,QAAQ,aAAa,KAAK,YAAY;AAAA,MACjD;AAEI,UAAI,WAAW;AACb,kBAAU,OAAO;AAAA,MACnB;AAAA,IACF;AAGA,QAAI,QAAQE,IAAAA,IAAI,IAAI;AAEpB,mBAAe,WAAW;AAExBF,aAAAA,MAAa,QAAQ,UAAU;AAAA,QAC7B,MAAM;AAAA,QACN,QAAQI,KAAAA,MAAW,KAAK;AAAA,MAC9B;AAEIJ,aAAAA,MAAa,QAAQ,QAAQ;AAAA,QAC3B,MAAM;AAAA,QACN,QAAQ,MAAM,OAAO;AAAA,MAC3B;AAEIA,aAAAA,MAAa,QAAQ,WAAW;AAAA,QAC9B,MAAM;AAAA,QACN,QAAQA,OAAAA,MAAa,QAAQ,SAAS,OAAO;AAAA,MACnD;AAEI,YAAM,QAAQ,MAAMK,OAAAA,QAAe,OAAOL,OAAAA,MAAa,OAAO;AAAA,IAChE;AAEA,aAAS,aAAc;AACrB,aAAO,KAAK;AAAA,QACV,MAAM,MAAM,KAAK,YAAY,eAAe,wBAAwB;AAAA,QACpE,QAAQ;AAAA,UACN,OAAO,MAAM,MAAM;AAAA,UACnB,KAAK,MAAM,OAAO;AAAA,QAC1B;AAAA,MACA,CAAK;AAAA,IACH;AAEA,UAAM,oBAAoBE,IAAAA,IAAI,CAAA,CAAE;AAIhCI,QAAAA,UAAU,YAAW;AAEnB,wBAAkB,QAAQ,MAAMC,cAAAA,QAAsB,KAAK;AAAA,QACzD,KAAK,MAAM,OAAO;AAAA,QAClB,QAAQ,CAAC,OAAO;AAAA,MACtB,CAAK;AAAA,IAKH,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"OrderCreateBackoffice.vue.cjs","sources":["../../../../../../../src/modules/orders/components/pages/OrderCreateBackoffice.vue"],"sourcesContent":["<template>\n <div class=\"flex flex-column pd-thin\">\n <Block class=\"mn-b-thin\">\n <header class=\"flex-v-center flex-nowrap flex\">\n <h2 class=\"mn-r-auto\">Create Order</h2>\n <Button \n :submit=\"onSubmit\"\n :callback=\"redirectTo\"\n class=\"pd-small radius-big bg-main t-black uppercase t-medium\"\n >\n Add Order \n </Button>\n </header>\n </Block>\n\n <Tab \n v-model:selected=\"tabOrderCreate\"\n :tabs=\"[\n {name: 'Positions', value: 'positions'},\n {name: 'Customer', value: 'customer'},\n {name: 'Delivery', value: 'delivery'},\n {name: 'Payment', value: 'payment'}\n ]\"\n class=\"t-medium radius-medium bg-light mn-b-small\"\n />\n\n <Popup \n @close-popup=\"closeProductsPopup\" \n :isPopupOpen=\"isOpenProductsPopup\"\n class=\"bg-white flex flex-column radius-big pd-medium pos-relative\"\n >\n\n <h3 class=\"mn-b-small\">Add to order</h3>\n\n <div class=\"bg-light h-max-100 mn-b-thin o-scroll pd-medium radius-big\">\n <Feed\n :showLoadMore=\"false\"\n :search=\"{\n placeholder: 'Search products...',\n class: 'bg-white mn-b-thin'\n }\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no such products available.'\n },\n skeleton: {\n hide: true\n }\n }\"\n :store=\"{\n read: (options) => products.actions.read(options),\n state: null\n }\"\n :options=\"{\n owner: route.params._id\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"\"\n >\n <CardOrderItem\n v-for=\"(product, index) in items\" \n :key=\"`${product._id}_${index}`\"\n :editable=\"false\" \n :productId=\"product._id\"\n :images=\"product.images\"\n :name=\"product.name\"\n @click=\"() => selectProduct(product)\"\n class=\"bg-white pd-thin radius-medium w-100 mn-b-thin\"\n />\n </Feed>\n </div>\n </Popup>\n\n <!-- Popup for selecting variant of the product -->\n <Popup \n title=\"Select variant\" \n @close-popup=\"closeVariantsPopup\" \n :isPopupOpen=\"isVariantsPopupOpen\"\n class=\"bg-white w-100 w-max-30r radius-medium pd-medium\"\n >\n <Feed\n :store=\"variants\"\n :options=\"{\n product: selectedProduct?._id,\n }\"\n :skeleton=\"{\n structure: [\n { block: 'text', size: 'small' },\n { block: 'text', size: 'medium' },\n { block: 'text', size: 'small' }\n ]\n }\"\n :states=\"{\n empty: {\n title: 'No variants',\n description: 'Create your first variant'\n }\n }\"\n v-slot=\"{ items }\"\n >\n <div class=\"gap-thin flex flex-column\">\n <div \n v-for=\"(variant, index) in items\" \n :key=\"index\"\n @click=\"addVariantToOrder(variant)\"\n class=\"w-100 cursor-pointer hover-scale-1 bg-light pd-small radius-small flex-v-center flex-nowrap flex gap-thin\"\n >\n <div v-if=\"variant.images && variant.images.length\" class=\"aspect-1x1 h-3r radius-small o-hidden\">\n <img \n :src=\"(FILE_SERVER_URL || '') + variant.images[0]\" \n class=\"w-100 h-100 object-fit-cover\"\n />\n </div>\n <div>\n <p class=\"t-medium\">{{ variant.name || 'Default variant' }}</p>\n <p v-if=\"variant.attributes && variant.attributes.length\" class=\"t-small t-transp\">\n {{ variant.attributes.map(attr => `${attr.name}: ${attr.value}`).join(', ') }}\n </p>\n </div>\n <p class=\"mn-l-auto\">{{ formatPrice(variant.price || variant.cost) }}</p>\n </div>\n </div>\n </Feed>\n </Popup>\n\n <Block\n v-if=\"tabOrderCreate === 'positions'\"\n title=\"Positions\"\n :actions=\"[{\n label: '+',\n function: () => openProductsPopup()\n }]\"\n class=\"mn-b-small\"\n >\n <span \n v-if=\"orders.state.current.positions.length === 0\" \n class=\"w-100\"\n >\n No positions added yet\n </span> \n\n <CardOrderItem\n v-for=\"(product, index) in orders.state.current.positions\" \n :key=\"`${product._id}_${product.variant || 'no-variant'}_${index}`\"\n :editable=\"true\" \n :productId=\"product._id\"\n :variantId=\"product.variant\"\n :images=\"product.images\"\n :name=\"product.name\"\n :quantity=\"product.quantity\"\n :unit=\"product.unit\"\n :dates=\"product.date\"\n :listing=\"product.listing\"\n :price=\"product.price\"\n :increase=\"() => incrementOrderItemQuantity(product._id, product.variant)\"\n :decrease=\"() => decrementOrderItemQuantity(product._id, product.variant)\"\n :remove=\"() => removeOrderItem(product._id, product.variant)\"\n @updateRentDates=\"(productId, variantId, dates) => updateOrderRentDates(productId, variantId, dates)\"\n class=\"mn-b-thin pd-thin radius-medium bg-white\"\n /> \n </Block>\n\n <FormSelectCustomer\n v-if=\"tabOrderCreate === 'customer'\"\n v-model:customer=\"orders.state.current.customer\"\n class=\"mn-b-semi\"\n />\n\n <FormDelivery \n v-if=\"tabOrderCreate === 'delivery'\" \n :order=\"orders.state.current\"\n :organization=\"orderOrganization[0]\" \n />\n\n <FormPayment \n v-if=\"tabOrderCreate === 'payment'\"\n :order=\"orders.state.current\" \n :organization=\"orderOrganization[0]\" \n />\n\n\n <Block\n class=\"mn-b-semi\"\n >\n <div class=\"h3 flex\">\n <span class=\"mn-r-auto t-transp\">In total</span>\n <span>{{ cartTotalPrice }} {{returnCurrency()}} </span >\n </div>\n </Block>\n</div>\n\n\n</template>\n\n<script setup=\"props\">\n import { computed, ref, defineProps, onMounted, reactive, toRefs, watch, getCurrentInstance } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n\n\n import Field from '@martyrs/src/components/Field/Field.vue'\n import Button from \"@martyrs/src/components/Button/Button.vue\"; \n import Tab from '@martyrs/src/components/Tab/Tab.vue'\n import Popup from '@martyrs/src/components/Popup/Popup.vue';\n\timport Block from '@martyrs/src/components/Block/Block.vue';\n import Feed from '@martyrs/src/components/Feed/Feed.vue'\n\n import CardOrderItem from '@martyrs/src/modules/orders/components/blocks/CardOrderItem.vue'\n import CardPosition from '@martyrs/src/modules/products/components/blocks/CardPosition.vue';\n import CardUser from '@martyrs/src/modules/auth/views/components/blocks/CardUser.vue'\n\n import BlockSearch from '@martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue'\n\n import FormSelectCustomer from '@martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue'\n import FormDelivery from '@martyrs/src/modules/orders/components/sections/FormDelivery.vue'\n import FormPayment from '@martyrs/src/modules/orders/components/sections/FormPayment.vue'\n\n // Import your store\n import * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n import * as orders from '@martyrs/src/modules/orders/store/orders.js';\n import * as organizations from '@martyrs/src/modules/organizations/store/organizations.js';\n import * as products from '@martyrs/src/modules/products/store/products.js';\n import variants from '@martyrs/src/modules/products/store/variants.store.js';\n\n import customers from '@martyrs/src/modules/orders/store/customers.store';\n \n import { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';\n\t\n // Accessing router\n const route = useRoute()\n const router = useRouter()\n const { proxy } = getCurrentInstance()\n const { formatPrice } = useGlobalMixins()\n\n orders.mutations.resetOrder(orders.state.current)\n\n let cartTotalPrice = computed(() => {\n return Number(orders.state.current.positions.reduce((total, product) => {\n if (product.listing === 'rent' && product.date?.start && product.date?.end) {\n const start = new Date(product.date.start);\n const end = new Date(product.date.end);\n const days = Math.ceil(Math.abs(end - start) / (1000 * 60 * 60 * 24)) + 1;\n return total + product.price * product.quantity * days;\n } else {\n return total + product.price * product.quantity;\n }\n }, 0));\n })\n\n // Tab\n const tabOrderCreate = ref('positions')\n\n // Popup\n const isOpenProductsPopup = ref(false);\n const isVariantsPopupOpen = ref(false);\n const selectedProduct = ref(null);\n\n function openProductsPopup() {\n isOpenProductsPopup.value = true;\n }\n\n function closeProductsPopup() {\n isOpenProductsPopup.value = false;\n }\n\n function closeVariantsPopup() {\n isVariantsPopupOpen.value = false;\n selectedProduct.value = null;\n }\n\n function selectProduct(product) {\n selectedProduct.value = product;\n closeProductsPopup();\n \n // If product has only one variant, add it directly without showing popup\n if (product.variants && product.variants.length === 1) {\n addVariantToOrder(product.variants[0]);\n return;\n }\n \n // If product has multiple variants or no variants defined, show popup\n isVariantsPopupOpen.value = true;\n }\n\n function formatProductName(product, variant) {\n if (!variant || product.variants?.length === 1 && !(variant.attributes?.length))\n return product.name;\n\n const attrs = variant.attributes?.map(a => a.value).filter(Boolean);\n return attrs?.length\n ? `${product.name} / ${attrs.join(' / ')}`\n : `${product.name} / ${variant.name}`;\n }\n\n async function addVariantToOrder(variant) {\n try {\n let selectedDates = null;\n \n // Если товар для аренды, сначала выбираем даты\n if (selectedProduct.value.listing === 'rent') {\n selectedDates = await proxy.$dateSelector(\n selectedProduct.value._id,\n variant._id,\n 1,\n variant.price || selectedProduct.value.price\n );\n \n if (!selectedDates) {\n // Если отменили выбор дат, возвращаемся к выбору вариантов\n return;\n }\n }\n \n const position = {\n _id: selectedProduct.value._id,\n images: variant.images?.length > 0 ? variant.images : selectedProduct.value.images,\n name: formatProductName(selectedProduct.value, variant),\n listing: selectedProduct.value.listing,\n price: variant.price || selectedProduct.value.price,\n quantity: 1,\n unit: variant.unit || selectedProduct.value.unit,\n date: selectedDates,\n variant: variant._id,\n org_id: route.params._id\n };\n \n globals.actions.add(orders.state.current.positions, position);\n closeVariantsPopup();\n } catch (error) {\n console.error('Error adding variant to order:', error);\n }\n }\n\n\n // Функции управления позициями заказа\n function incrementOrderItemQuantity(productId, variantId) {\n const orderItem = orders.state.current.positions.find(item => \n item._id === productId && item.variant === variantId\n );\n \n if (orderItem) {\n orderItem.quantity++;\n }\n }\n\n function decrementOrderItemQuantity(productId, variantId) {\n const orderItem = orders.state.current.positions.find(item => \n item._id === productId && item.variant === variantId\n );\n \n if (orderItem) {\n orderItem.quantity--;\n \n if (orderItem.quantity < 1) {\n removeOrderItem(productId, variantId);\n }\n }\n }\n\n function removeOrderItem(productId, variantId) {\n const itemIndex = orders.state.current.positions.findIndex(item => \n item._id === productId && item.variant === variantId\n );\n \n if (itemIndex > -1) {\n orders.state.current.positions.splice(itemIndex, 1);\n }\n }\n\n function updateOrderRentDates(productId, variantId, dates) {\n const orderItem = orders.state.current.positions.find(item => \n item._id === productId && item.variant === variantId\n );\n \n if (orderItem) {\n orderItem.date = dates;\n }\n }\n\n // Data\n let order = ref(null)\n\n async function onSubmit() {\n\n orders.state.current.creator = {\n type: 'User',\n target: auth.state.user._id\n }\n\n orders.state.current.owner = {\n type: 'Organization',\n target: route.params._id,\n }\n\n orders.state.current.customer = {\n type: 'Customer',\n target: orders.state.current.customer._id || null,\n }\n\n order.value = await orders.actions.create(orders.state.current)\n }\n\n function redirectTo () {\n router.push({\n name: route.meta.context === 'backoffice' ? 'BackofficeOrderEdit' : 'OrganizationOrderEdit',\n params: { \n order: order.value._id,\n _id: route.params._id\n } \n })\n }\n\n const orderOrganization = ref({})\n\n\n\n onMounted(async() => {\n\n orderOrganization.value = await organizations.actions.read({\n _id: route.params._id,\n lookup: ['spots']\n })\n\n // await orders.actions.fetchOrder(route.params.id) // Implement this action in your store\n\n // order.value = orders.state.current\n })\n\n</script>\n\n\n<style lang=\"scss\">\n\n.vue-select {\n width: inherit;\n\n margin-right: 1rem;\n}\n.vue-select-header {\n height: 3rem;\n}\n</style>\n"],"names":["useRoute","useRouter","getCurrentInstance","useGlobalMixins","orders.mutations","orders.state","computed","ref","globals.actions","auth.state","orders.actions","onMounted","organizations.actions"],"mappings":"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"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import { getCurrentInstance, computed, ref, onMounted, createElementBlock, openBlock, createVNode, createBlock, createCommentVNode, withCtx, createElementVNode, createTextVNode, unref, Fragment, renderList, toDisplayString
|
|
1
|
+
import { getCurrentInstance, computed, ref, onMounted, createElementBlock, openBlock, createVNode, createBlock, createCommentVNode, withCtx, createElementVNode, createTextVNode, unref, Fragment, renderList, toDisplayString } from "vue";
|
|
2
2
|
import { useRoute, useRouter } from "vue-router";
|
|
3
3
|
/* empty css */
|
|
4
|
-
import _sfc_main$2 from "../../../../components/Button/Button.
|
|
5
|
-
import _sfc_main$3 from "../../../../components/Tab/Tab.
|
|
4
|
+
import _sfc_main$2 from "../../../../components/Button/Button.vue2.js";
|
|
5
|
+
import _sfc_main$3 from "../../../../components/Tab/Tab.vue2.js";
|
|
6
6
|
import _sfc_main$4 from "../../../../components/Popup/Popup.vue.js";
|
|
7
7
|
import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
|
|
8
8
|
import _sfc_main$5 from "../../../../components/Feed/Feed.vue.js";
|
|
9
9
|
import _sfc_main$6 from "../blocks/CardOrderItem.vue.js";
|
|
10
10
|
import { useGlobalMixins } from "../../../globals/views/mixins/mixins.js";
|
|
11
|
-
import _sfc_main$7 from "
|
|
12
|
-
import _sfc_main$a from "../sections/FormAddCustomer.vue.js";
|
|
11
|
+
import _sfc_main$7 from "../forms/FormSelectCustomer.vue.js";
|
|
13
12
|
import _sfc_main$8 from "../sections/FormDelivery.vue.js";
|
|
14
13
|
import _sfc_main$9 from "../sections/FormPayment.vue.js";
|
|
15
14
|
import { actions as actions$3 } from "../../../globals/views/store/globals.js";
|
|
@@ -18,7 +17,7 @@ import { mutations, state, actions as actions$2 } from "../../store/orders.js";
|
|
|
18
17
|
import { actions } from "../../../organizations/store/organizations.js";
|
|
19
18
|
import { actions as actions$1 } from "../../../products/store/products.js";
|
|
20
19
|
import variantsStore from "../../../products/store/variants.store.js";
|
|
21
|
-
import
|
|
20
|
+
import "../../store/customers.store.js";
|
|
22
21
|
/* empty css */
|
|
23
22
|
const _hoisted_1 = { class: "flex flex-column pd-thin" };
|
|
24
23
|
const _hoisted_2 = { class: "flex-v-center flex-nowrap flex" };
|
|
@@ -122,13 +121,6 @@ const _sfc_main = {
|
|
|
122
121
|
console.error("Error adding variant to order:", error);
|
|
123
122
|
}
|
|
124
123
|
}
|
|
125
|
-
const isOpenCustomerPopup = ref(false);
|
|
126
|
-
function openCustomerPopup() {
|
|
127
|
-
isOpenCustomerPopup.value = true;
|
|
128
|
-
}
|
|
129
|
-
function closeCustomerPopup() {
|
|
130
|
-
isOpenCustomerPopup.value = false;
|
|
131
|
-
}
|
|
132
124
|
function incrementOrderItemQuantity(productId, variantId) {
|
|
133
125
|
const orderItem = state.current.positions.find(
|
|
134
126
|
(item) => item._id === productId && item.variant === variantId
|
|
@@ -368,67 +360,12 @@ const _sfc_main = {
|
|
|
368
360
|
]),
|
|
369
361
|
_: 1
|
|
370
362
|
}, 8, ["actions"])) : createCommentVNode("", true),
|
|
371
|
-
tabOrderCreate.value === "customer" ? (openBlock(), createBlock(_sfc_main$
|
|
363
|
+
tabOrderCreate.value === "customer" ? (openBlock(), createBlock(_sfc_main$7, {
|
|
372
364
|
key: 1,
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
function: () => openCustomerPopup()
|
|
378
|
-
}]
|
|
379
|
-
}, {
|
|
380
|
-
default: withCtx(() => [
|
|
381
|
-
state.current.customer._id ? (openBlock(), createBlock(_sfc_main$7, {
|
|
382
|
-
key: 0,
|
|
383
|
-
user: state.current.customer,
|
|
384
|
-
photo: state.current.customer.profile.photo,
|
|
385
|
-
name: state.current.customer.profile.name || state.current.customer.phone || state.current.customer.email,
|
|
386
|
-
onClick: _cache[2] || (_cache[2] = () => {
|
|
387
|
-
mutations.resetCustomer(state.current.customer);
|
|
388
|
-
}),
|
|
389
|
-
class: "bg-white pd-thin h-4r radius-medium w-100 mn-b-thin"
|
|
390
|
-
}, null, 8, ["user", "photo", "name"])) : (openBlock(), createBlock(_sfc_main$5, {
|
|
391
|
-
key: 1,
|
|
392
|
-
search: {
|
|
393
|
-
placeholder: "Search customer...",
|
|
394
|
-
class: "bg-white mn-b-thin"
|
|
395
|
-
},
|
|
396
|
-
states: {
|
|
397
|
-
empty: {
|
|
398
|
-
title: "No Products Found",
|
|
399
|
-
description: "Currently, there are no such products available."
|
|
400
|
-
}
|
|
401
|
-
},
|
|
402
|
-
store: {
|
|
403
|
-
read: (options) => unref(customers).read(options),
|
|
404
|
-
state: null
|
|
405
|
-
},
|
|
406
|
-
options: {
|
|
407
|
-
owner: unref(route).params._id
|
|
408
|
-
},
|
|
409
|
-
class: "bg-light h-max-20r o-scroll"
|
|
410
|
-
}, {
|
|
411
|
-
default: withCtx(({
|
|
412
|
-
items
|
|
413
|
-
}) => [
|
|
414
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(items, (user, index) => {
|
|
415
|
-
return openBlock(), createBlock(_sfc_main$7, {
|
|
416
|
-
key: user._id,
|
|
417
|
-
user,
|
|
418
|
-
photo: user.profile.photo,
|
|
419
|
-
name: user.profile.name || user.phone || user.email,
|
|
420
|
-
onClick: () => {
|
|
421
|
-
state.current.customer = user;
|
|
422
|
-
},
|
|
423
|
-
class: "bg-white pd-thin h-4r radius-medium w-100 mn-b-thin"
|
|
424
|
-
}, null, 8, ["user", "photo", "name", "onClick"]);
|
|
425
|
-
}), 128))
|
|
426
|
-
]),
|
|
427
|
-
_: 1
|
|
428
|
-
}, 8, ["store", "options"]))
|
|
429
|
-
]),
|
|
430
|
-
_: 1
|
|
431
|
-
}, 8, ["actions"])) : createCommentVNode("", true),
|
|
365
|
+
customer: state.current.customer,
|
|
366
|
+
"onUpdate:customer": _cache[2] || (_cache[2] = ($event) => state.current.customer = $event),
|
|
367
|
+
class: "mn-b-semi"
|
|
368
|
+
}, null, 8, ["customer"])) : createCommentVNode("", true),
|
|
432
369
|
tabOrderCreate.value === "delivery" ? (openBlock(), createBlock(_sfc_main$8, {
|
|
433
370
|
key: 2,
|
|
434
371
|
order: state.current,
|
|
@@ -439,17 +376,6 @@ const _sfc_main = {
|
|
|
439
376
|
order: state.current,
|
|
440
377
|
organization: orderOrganization.value[0]
|
|
441
378
|
}, null, 8, ["order", "organization"])) : createCommentVNode("", true),
|
|
442
|
-
createVNode(_sfc_main$4, {
|
|
443
|
-
title: "Add customer",
|
|
444
|
-
onClosePopup: closeCustomerPopup,
|
|
445
|
-
isPopupOpen: isOpenCustomerPopup.value,
|
|
446
|
-
class: normalizeClass("bg-white w-min-30r w-max-30r radius-big pd-medium")
|
|
447
|
-
}, {
|
|
448
|
-
default: withCtx(() => [
|
|
449
|
-
createVNode(_sfc_main$a, { onCallbackCustomer: closeCustomerPopup })
|
|
450
|
-
]),
|
|
451
|
-
_: 1
|
|
452
|
-
}, 8, ["isPopupOpen"]),
|
|
453
379
|
createVNode(_sfc_main$1, { class: "mn-b-semi" }, {
|
|
454
380
|
default: withCtx(() => [
|
|
455
381
|
createElementVNode("div", _hoisted_12, [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderCreateBackoffice.vue.js","sources":["../../../../../../../src/modules/orders/components/pages/OrderCreateBackoffice.vue"],"sourcesContent":["<template>\n <div class=\"flex flex-column pd-thin\">\n <Block class=\"mn-b-thin\">\n <header class=\"flex-v-center flex-nowrap flex\">\n <h2 class=\"mn-r-auto\">Create Order</h2>\n <Button \n :submit=\"onSubmit\"\n :callback=\"redirectTo\"\n class=\"pd-small radius-big bg-main t-black uppercase t-medium\"\n >\n Add Order \n </Button>\n </header>\n </Block>\n\n <Tab \n v-model:selected=\"tabOrderCreate\"\n :tabs=\"[\n {name: 'Positions', value: 'positions'},\n {name: 'Customer', value: 'customer'},\n {name: 'Delivery', value: 'delivery'},\n {name: 'Payment', value: 'payment'}\n ]\"\n class=\"t-medium radius-medium bg-light mn-b-small\"\n />\n\n <Popup \n @close-popup=\"closeProductsPopup\" \n :isPopupOpen=\"isOpenProductsPopup\"\n class=\"bg-white flex flex-column radius-big pd-medium pos-relative\"\n >\n\n <h3 class=\"mn-b-small\">Add to order</h3>\n\n <div class=\"bg-light h-max-100 mn-b-thin o-scroll pd-medium radius-big\">\n <Feed\n :showLoadMore=\"false\"\n :search=\"{\n placeholder: 'Search products...',\n class: 'bg-white mn-b-thin'\n }\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no such products available.'\n },\n skeleton: {\n hide: true\n }\n }\"\n :store=\"{\n read: (options) => products.actions.read(options),\n state: null\n }\"\n :options=\"{\n owner: route.params._id\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"\"\n >\n <CardOrderItem\n v-for=\"(product, index) in items\" \n :key=\"`${product._id}_${index}`\"\n :editable=\"false\" \n :productId=\"product._id\"\n :images=\"product.images\"\n :name=\"product.name\"\n @click=\"() => selectProduct(product)\"\n class=\"bg-white pd-thin radius-medium w-100 mn-b-thin\"\n />\n </Feed>\n </div>\n </Popup>\n\n <!-- Popup for selecting variant of the product -->\n <Popup \n title=\"Select variant\" \n @close-popup=\"closeVariantsPopup\" \n :isPopupOpen=\"isVariantsPopupOpen\"\n class=\"bg-white w-100 w-max-30r radius-medium pd-medium\"\n >\n <Feed\n :store=\"variants\"\n :options=\"{\n product: selectedProduct?._id,\n }\"\n :skeleton=\"{\n structure: [\n { block: 'text', size: 'small' },\n { block: 'text', size: 'medium' },\n { block: 'text', size: 'small' }\n ]\n }\"\n :states=\"{\n empty: {\n title: 'No variants',\n description: 'Create your first variant'\n }\n }\"\n v-slot=\"{ items }\"\n >\n <div class=\"gap-thin flex flex-column\">\n <div \n v-for=\"(variant, index) in items\" \n :key=\"index\"\n @click=\"addVariantToOrder(variant)\"\n class=\"w-100 cursor-pointer hover-scale-1 bg-light pd-small radius-small flex-v-center flex-nowrap flex gap-thin\"\n >\n <div v-if=\"variant.images && variant.images.length\" class=\"aspect-1x1 h-3r radius-small o-hidden\">\n <img \n :src=\"(FILE_SERVER_URL || '') + variant.images[0]\" \n class=\"w-100 h-100 object-fit-cover\"\n />\n </div>\n <div>\n <p class=\"t-medium\">{{ variant.name || 'Default variant' }}</p>\n <p v-if=\"variant.attributes && variant.attributes.length\" class=\"t-small t-transp\">\n {{ variant.attributes.map(attr => `${attr.name}: ${attr.value}`).join(', ') }}\n </p>\n </div>\n <p class=\"mn-l-auto\">{{ formatPrice(variant.price || variant.cost) }}</p>\n </div>\n </div>\n </Feed>\n </Popup>\n\n <Block\n v-if=\"tabOrderCreate === 'positions'\"\n title=\"Positions\"\n :actions=\"[{\n label: '+',\n function: () => openProductsPopup()\n }]\"\n class=\"mn-b-small\"\n >\n <span \n v-if=\"orders.state.current.positions.length === 0\" \n class=\"w-100\"\n >\n No positions added yet\n </span> \n\n <CardOrderItem\n v-for=\"(product, index) in orders.state.current.positions\" \n :key=\"`${product._id}_${product.variant || 'no-variant'}_${index}`\"\n :editable=\"true\" \n :productId=\"product._id\"\n :variantId=\"product.variant\"\n :images=\"product.images\"\n :name=\"product.name\"\n :quantity=\"product.quantity\"\n :unit=\"product.unit\"\n :dates=\"product.date\"\n :listing=\"product.listing\"\n :price=\"product.price\"\n :increase=\"() => incrementOrderItemQuantity(product._id, product.variant)\"\n :decrease=\"() => decrementOrderItemQuantity(product._id, product.variant)\"\n :remove=\"() => removeOrderItem(product._id, product.variant)\"\n @updateRentDates=\"(productId, variantId, dates) => updateOrderRentDates(productId, variantId, dates)\"\n class=\"mn-b-thin pd-thin radius-medium bg-white\"\n /> \n </Block>\n\n <Block\n v-if=\"tabOrderCreate === 'customer'\"\n title=\"Customer\"\n class=\"mn-b-semi\"\n :actions=\"[{\n label: '+',\n function: () => openCustomerPopup()\n }]\"\n >\n <CardUser\n v-if=\"orders.state.current.customer._id\"\n :user=\"orders.state.current.customer\"\n :photo=\"orders.state.current.customer.profile.photo\"\n :name=\"orders.state.current.customer.profile.name || orders.state.current.customer.phone || orders.state.current.customer.email\"\n @click=\"() => { \n orders.mutations.resetCustomer(orders.state.current.customer)\n }\"\n class=\"bg-white pd-thin h-4r radius-medium w-100 mn-b-thin\"\n />\n <Feed\n v-else\n :search=\"{\n placeholder: 'Search customer...',\n class: 'bg-white mn-b-thin'\n }\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no such products available.'\n }\n }\"\n :store=\"{\n read: (options) => customers.read(options),\n state: null\n }\"\n :options=\"{\n owner: route.params._id\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"bg-light h-max-20r o-scroll\"\n >\n <CardUser\n v-for=\"(user, index) in items\" \n :key=\"user._id\"\n :user=\"user\"\n :photo=\"user.profile.photo\"\n :name=\"user.profile.name || user.phone || user.email\"\n @click=\"() => { \n orders.state.current.customer = user\n }\"\n class=\"bg-white pd-thin h-4r radius-medium w-100 mn-b-thin\"\n />\n </Feed>\n \n </Block>\n\n <FormDelivery \n v-if=\"tabOrderCreate === 'delivery'\" \n :order=\"orders.state.current\"\n :organization=\"orderOrganization[0]\" \n />\n\n <FormPayment \n v-if=\"tabOrderCreate === 'payment'\"\n :order=\"orders.state.current\" \n :organization=\"orderOrganization[0]\" \n />\n\n <Popup \n title=\"Add customer\" \n @close-popup=\"closeCustomerPopup\" \n :isPopupOpen=\"isOpenCustomerPopup\"\n :class=\"'bg-white w-min-30r w-max-30r radius-big pd-medium'\"\n >\n <FormAddCustomer \n @callbackCustomer=\"closeCustomerPopup\"\n />\n </Popup>\n\n <Block\n class=\"mn-b-semi\"\n >\n <div class=\"h3 flex\">\n <span class=\"mn-r-auto t-transp\">In total</span>\n <span>{{ cartTotalPrice }} {{returnCurrency()}} </span >\n </div>\n </Block>\n</div>\n\n\n</template>\n\n<script setup=\"props\">\n import { computed, ref, defineProps, onMounted, reactive, toRefs, watch, getCurrentInstance } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n\n\n import Field from '@martyrs/src/components/Field/Field.vue'\n import Button from \"@martyrs/src/components/Button/Button.vue\"; \n import Tab from '@martyrs/src/components/Tab/Tab.vue'\n import Popup from '@martyrs/src/components/Popup/Popup.vue';\n\timport Block from '@martyrs/src/components/Block/Block.vue';\n import Feed from '@martyrs/src/components/Feed/Feed.vue'\n\n import CardOrderItem from '@martyrs/src/modules/orders/components/blocks/CardOrderItem.vue'\n import CardPosition from '@martyrs/src/modules/products/components/blocks/CardPosition.vue';\n import CardUser from '@martyrs/src/modules/auth/views/components/blocks/CardUser.vue'\n\n import BlockSearch from '@martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue'\n\n import FormAddCustomer from '@martyrs/src/modules/orders/components/sections/FormAddCustomer.vue'\n import FormDelivery from '@martyrs/src/modules/orders/components/sections/FormDelivery.vue'\n import FormPayment from '@martyrs/src/modules/orders/components/sections/FormPayment.vue'\n\n // Import your store\n import * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n import * as orders from '@martyrs/src/modules/orders/store/orders.js';\n import * as organizations from '@martyrs/src/modules/organizations/store/organizations.js';\n import * as products from '@martyrs/src/modules/products/store/products.js';\n import variants from '@martyrs/src/modules/products/store/variants.store.js';\n\n import customers from '@martyrs/src/modules/orders/store/customers.store';\n \n import { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';\n\t\n // Accessing router\n const route = useRoute()\n const router = useRouter()\n const { proxy } = getCurrentInstance()\n const { formatPrice } = useGlobalMixins()\n\n orders.mutations.resetOrder(orders.state.current)\n\n let cartTotalPrice = computed(() => {\n return Number(orders.state.current.positions.reduce((total, product) => {\n if (product.listing === 'rent' && product.date?.start && product.date?.end) {\n const start = new Date(product.date.start);\n const end = new Date(product.date.end);\n const days = Math.ceil(Math.abs(end - start) / (1000 * 60 * 60 * 24)) + 1;\n return total + product.price * product.quantity * days;\n } else {\n return total + product.price * product.quantity;\n }\n }, 0));\n })\n\n // Tab\n const tabOrderCreate = ref('positions')\n\n // Popup\n const isOpenProductsPopup = ref(false);\n const isVariantsPopupOpen = ref(false);\n const selectedProduct = ref(null);\n\n function openProductsPopup() {\n isOpenProductsPopup.value = true;\n }\n\n function closeProductsPopup() {\n isOpenProductsPopup.value = false;\n }\n\n function closeVariantsPopup() {\n isVariantsPopupOpen.value = false;\n selectedProduct.value = null;\n }\n\n function selectProduct(product) {\n selectedProduct.value = product;\n closeProductsPopup();\n \n // If product has only one variant, add it directly without showing popup\n if (product.variants && product.variants.length === 1) {\n addVariantToOrder(product.variants[0]);\n return;\n }\n \n // If product has multiple variants or no variants defined, show popup\n isVariantsPopupOpen.value = true;\n }\n\n function formatProductName(product, variant) {\n if (!variant || product.variants?.length === 1 && !(variant.attributes?.length))\n return product.name;\n\n const attrs = variant.attributes?.map(a => a.value).filter(Boolean);\n return attrs?.length\n ? `${product.name} / ${attrs.join(' / ')}`\n : `${product.name} / ${variant.name}`;\n }\n\n async function addVariantToOrder(variant) {\n try {\n let selectedDates = null;\n \n // Если товар для аренды, сначала выбираем даты\n if (selectedProduct.value.listing === 'rent') {\n selectedDates = await proxy.$dateSelector(\n selectedProduct.value._id,\n variant._id,\n 1,\n variant.price || selectedProduct.value.price\n );\n \n if (!selectedDates) {\n // Если отменили выбор дат, возвращаемся к выбору вариантов\n return;\n }\n }\n \n const position = {\n _id: selectedProduct.value._id,\n images: variant.images?.length > 0 ? variant.images : selectedProduct.value.images,\n name: formatProductName(selectedProduct.value, variant),\n listing: selectedProduct.value.listing,\n price: variant.price || selectedProduct.value.price,\n quantity: 1,\n unit: variant.unit || selectedProduct.value.unit,\n date: selectedDates,\n variant: variant._id,\n org_id: route.params._id\n };\n \n globals.actions.add(orders.state.current.positions, position);\n closeVariantsPopup();\n } catch (error) {\n console.error('Error adding variant to order:', error);\n }\n }\n\n const isOpenCustomerPopup = ref(false);\n\n function openCustomerPopup() {\n isOpenCustomerPopup.value = true;\n }\n\n function closeCustomerPopup() {\n isOpenCustomerPopup.value = false;\n }\n\n // Функции управления позициями заказа\n function incrementOrderItemQuantity(productId, variantId) {\n const orderItem = orders.state.current.positions.find(item => \n item._id === productId && item.variant === variantId\n );\n \n if (orderItem) {\n orderItem.quantity++;\n }\n }\n\n function decrementOrderItemQuantity(productId, variantId) {\n const orderItem = orders.state.current.positions.find(item => \n item._id === productId && item.variant === variantId\n );\n \n if (orderItem) {\n orderItem.quantity--;\n \n if (orderItem.quantity < 1) {\n removeOrderItem(productId, variantId);\n }\n }\n }\n\n function removeOrderItem(productId, variantId) {\n const itemIndex = orders.state.current.positions.findIndex(item => \n item._id === productId && item.variant === variantId\n );\n \n if (itemIndex > -1) {\n orders.state.current.positions.splice(itemIndex, 1);\n }\n }\n\n function updateOrderRentDates(productId, variantId, dates) {\n const orderItem = orders.state.current.positions.find(item => \n item._id === productId && item.variant === variantId\n );\n \n if (orderItem) {\n orderItem.date = dates;\n }\n }\n\n // Data\n let order = ref(null)\n\n async function onSubmit() {\n\n orders.state.current.creator = {\n type: 'User',\n target: auth.state.user._id\n }\n\n orders.state.current.owner = {\n type: 'Organization',\n target: route.params._id,\n }\n\n orders.state.current.customer = {\n type: 'Customer',\n target: orders.state.current.customer._id || null,\n }\n\n order.value = await orders.actions.create(orders.state.current)\n }\n\n function redirectTo () {\n router.push({\n name: route.meta.context === 'backoffice' ? 'BackofficeOrderEdit' : 'OrganizationOrderEdit',\n params: { \n order: order.value._id,\n _id: route.params._id\n } \n })\n }\n\n const orderOrganization = ref({})\n\n\n\n onMounted(async() => {\n\n orderOrganization.value = await organizations.actions.read({\n _id: route.params._id,\n lookup: ['spots']\n })\n\n // await orders.actions.fetchOrder(route.params.id) // Implement this action in your store\n\n // order.value = orders.state.current\n })\n\n</script>\n\n\n<style lang=\"scss\">\n\n.vue-select {\n width: inherit;\n\n margin-right: 1rem;\n}\n.vue-select-header {\n height: 3rem;\n}\n</style>\n"],"names":["orders.mutations","orders.state","globals.actions","auth.state","orders.actions","organizations.actions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsSE,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AACxB,UAAM,EAAE,MAAK,IAAK,mBAAkB;AACpC,UAAM,EAAE,YAAW,IAAK,gBAAe;AAEtCA,cAAiB,WAAWC,MAAa,OAAO;AAEjD,QAAI,iBAAiB,SAAS,MAAM;AAClC,aAAO,OAAOA,MAAa,QAAQ,UAAU,OAAO,CAAC,OAAO,YAAY;AACtE,YAAI,QAAQ,YAAY,UAAU,QAAQ,MAAM,SAAS,QAAQ,MAAM,KAAK;AAC1E,gBAAM,QAAQ,IAAI,KAAK,QAAQ,KAAK,KAAK;AACzC,gBAAM,MAAM,IAAI,KAAK,QAAQ,KAAK,GAAG;AACrC,gBAAM,OAAO,KAAK,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,MAAO,KAAK,KAAK,GAAG,IAAI;AACxE,iBAAO,QAAQ,QAAQ,QAAQ,QAAQ,WAAW;AAAA,QACpD,OAAO;AACL,iBAAO,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,QACzC;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,IACP,CAAC;AAGD,UAAM,iBAAiB,IAAI,WAAW;AAGtC,UAAM,sBAAsB,IAAI,KAAK;AACrC,UAAM,sBAAsB,IAAI,KAAK;AACrC,UAAM,kBAAkB,IAAI,IAAI;AAEhC,aAAS,oBAAoB;AAC3B,0BAAoB,QAAQ;AAAA,IAC9B;AAEA,aAAS,qBAAqB;AAC5B,0BAAoB,QAAQ;AAAA,IAC9B;AAEA,aAAS,qBAAqB;AAC5B,0BAAoB,QAAQ;AAC5B,sBAAgB,QAAQ;AAAA,IAC1B;AAEA,aAAS,cAAc,SAAS;AAC9B,sBAAgB,QAAQ;AACxB,yBAAkB;AAGlB,UAAI,QAAQ,YAAY,QAAQ,SAAS,WAAW,GAAG;AACrD,0BAAkB,QAAQ,SAAS,CAAC,CAAC;AACrC;AAAA,MACF;AAGA,0BAAoB,QAAQ;AAAA,IAC9B;AAEA,aAAS,kBAAkB,SAAS,SAAS;AAC3C,UAAI,CAAC,WAAW,QAAQ,UAAU,WAAW,KAAK,CAAE,QAAQ,YAAY;AACtE,eAAO,QAAQ;AAEjB,YAAM,QAAQ,QAAQ,YAAY,IAAI,OAAK,EAAE,KAAK,EAAE,OAAO,OAAO;AAClE,aAAO,OAAO,SACV,GAAG,QAAQ,IAAI,MAAM,MAAM,KAAK,KAAK,CAAC,KACtC,GAAG,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAAA,IACvC;AAEA,mBAAe,kBAAkB,SAAS;AACxC,UAAI;AACF,YAAI,gBAAgB;AAGpB,YAAI,gBAAgB,MAAM,YAAY,QAAQ;AAC5C,0BAAgB,MAAM,MAAM;AAAA,YAC1B,gBAAgB,MAAM;AAAA,YACtB,QAAQ;AAAA,YACR;AAAA,YACA,QAAQ,SAAS,gBAAgB,MAAM;AAAA,UACjD;AAEQ,cAAI,CAAC,eAAe;AAElB;AAAA,UACF;AAAA,QACF;AAEA,cAAM,WAAW;AAAA,UACf,KAAK,gBAAgB,MAAM;AAAA,UAC3B,QAAQ,QAAQ,QAAQ,SAAS,IAAI,QAAQ,SAAS,gBAAgB,MAAM;AAAA,UAC5E,MAAM,kBAAkB,gBAAgB,OAAO,OAAO;AAAA,UACtD,SAAS,gBAAgB,MAAM;AAAA,UAC/B,OAAO,QAAQ,SAAS,gBAAgB,MAAM;AAAA,UAC9C,UAAU;AAAA,UACV,MAAM,QAAQ,QAAQ,gBAAgB,MAAM;AAAA,UAC5C,MAAM;AAAA,UACN,SAAS,QAAQ;AAAA,UACjB,QAAQ,MAAM,OAAO;AAAA,QAC7B;AAEMC,kBAAgB,IAAID,MAAa,QAAQ,WAAW,QAAQ;AAC5D,2BAAkB;AAAA,MACpB,SAAS,OAAO;AACd,gBAAQ,MAAM,kCAAkC,KAAK;AAAA,MACvD;AAAA,IACF;AAEA,UAAM,sBAAsB,IAAI,KAAK;AAErC,aAAS,oBAAoB;AAC3B,0BAAoB,QAAQ;AAAA,IAC9B;AAEA,aAAS,qBAAqB;AAC5B,0BAAoB,QAAQ;AAAA,IAC9B;AAGA,aAAS,2BAA2B,WAAW,WAAW;AACxD,YAAM,YAAYA,MAAa,QAAQ,UAAU;AAAA,QAAK,UACpD,KAAK,QAAQ,aAAa,KAAK,YAAY;AAAA,MACjD;AAEI,UAAI,WAAW;AACb,kBAAU;AAAA,MACZ;AAAA,IACF;AAEA,aAAS,2BAA2B,WAAW,WAAW;AACxD,YAAM,YAAYA,MAAa,QAAQ,UAAU;AAAA,QAAK,UACpD,KAAK,QAAQ,aAAa,KAAK,YAAY;AAAA,MACjD;AAEI,UAAI,WAAW;AACb,kBAAU;AAEV,YAAI,UAAU,WAAW,GAAG;AAC1B,0BAAgB,WAAW,SAAS;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAEA,aAAS,gBAAgB,WAAW,WAAW;AAC7C,YAAM,YAAYA,MAAa,QAAQ,UAAU;AAAA,QAAU,UACzD,KAAK,QAAQ,aAAa,KAAK,YAAY;AAAA,MACjD;AAEI,UAAI,YAAY,IAAI;AAClBA,cAAa,QAAQ,UAAU,OAAO,WAAW,CAAC;AAAA,MACpD;AAAA,IACF;AAEA,aAAS,qBAAqB,WAAW,WAAW,OAAO;AACzD,YAAM,YAAYA,MAAa,QAAQ,UAAU;AAAA,QAAK,UACpD,KAAK,QAAQ,aAAa,KAAK,YAAY;AAAA,MACjD;AAEI,UAAI,WAAW;AACb,kBAAU,OAAO;AAAA,MACnB;AAAA,IACF;AAGA,QAAI,QAAQ,IAAI,IAAI;AAEpB,mBAAe,WAAW;AAExBA,YAAa,QAAQ,UAAU;AAAA,QAC7B,MAAM;AAAA,QACN,QAAQE,QAAW,KAAK;AAAA,MAC9B;AAEIF,YAAa,QAAQ,QAAQ;AAAA,QAC3B,MAAM;AAAA,QACN,QAAQ,MAAM,OAAO;AAAA,MAC3B;AAEIA,YAAa,QAAQ,WAAW;AAAA,QAC9B,MAAM;AAAA,QACN,QAAQA,MAAa,QAAQ,SAAS,OAAO;AAAA,MACnD;AAEI,YAAM,QAAQ,MAAMG,UAAe,OAAOH,MAAa,OAAO;AAAA,IAChE;AAEA,aAAS,aAAc;AACrB,aAAO,KAAK;AAAA,QACV,MAAM,MAAM,KAAK,YAAY,eAAe,wBAAwB;AAAA,QACpE,QAAQ;AAAA,UACN,OAAO,MAAM,MAAM;AAAA,UACnB,KAAK,MAAM,OAAO;AAAA,QAC1B;AAAA,MACA,CAAK;AAAA,IACH;AAEA,UAAM,oBAAoB,IAAI,CAAA,CAAE;AAIhC,cAAU,YAAW;AAEnB,wBAAkB,QAAQ,MAAMI,QAAsB,KAAK;AAAA,QACzD,KAAK,MAAM,OAAO;AAAA,QAClB,QAAQ,CAAC,OAAO;AAAA,MACtB,CAAK;AAAA,IAKH,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"OrderCreateBackoffice.vue.js","sources":["../../../../../../../src/modules/orders/components/pages/OrderCreateBackoffice.vue"],"sourcesContent":["<template>\n <div class=\"flex flex-column pd-thin\">\n <Block class=\"mn-b-thin\">\n <header class=\"flex-v-center flex-nowrap flex\">\n <h2 class=\"mn-r-auto\">Create Order</h2>\n <Button \n :submit=\"onSubmit\"\n :callback=\"redirectTo\"\n class=\"pd-small radius-big bg-main t-black uppercase t-medium\"\n >\n Add Order \n </Button>\n </header>\n </Block>\n\n <Tab \n v-model:selected=\"tabOrderCreate\"\n :tabs=\"[\n {name: 'Positions', value: 'positions'},\n {name: 'Customer', value: 'customer'},\n {name: 'Delivery', value: 'delivery'},\n {name: 'Payment', value: 'payment'}\n ]\"\n class=\"t-medium radius-medium bg-light mn-b-small\"\n />\n\n <Popup \n @close-popup=\"closeProductsPopup\" \n :isPopupOpen=\"isOpenProductsPopup\"\n class=\"bg-white flex flex-column radius-big pd-medium pos-relative\"\n >\n\n <h3 class=\"mn-b-small\">Add to order</h3>\n\n <div class=\"bg-light h-max-100 mn-b-thin o-scroll pd-medium radius-big\">\n <Feed\n :showLoadMore=\"false\"\n :search=\"{\n placeholder: 'Search products...',\n class: 'bg-white mn-b-thin'\n }\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no such products available.'\n },\n skeleton: {\n hide: true\n }\n }\"\n :store=\"{\n read: (options) => products.actions.read(options),\n state: null\n }\"\n :options=\"{\n owner: route.params._id\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"\"\n >\n <CardOrderItem\n v-for=\"(product, index) in items\" \n :key=\"`${product._id}_${index}`\"\n :editable=\"false\" \n :productId=\"product._id\"\n :images=\"product.images\"\n :name=\"product.name\"\n @click=\"() => selectProduct(product)\"\n class=\"bg-white pd-thin radius-medium w-100 mn-b-thin\"\n />\n </Feed>\n </div>\n </Popup>\n\n <!-- Popup for selecting variant of the product -->\n <Popup \n title=\"Select variant\" \n @close-popup=\"closeVariantsPopup\" \n :isPopupOpen=\"isVariantsPopupOpen\"\n class=\"bg-white w-100 w-max-30r radius-medium pd-medium\"\n >\n <Feed\n :store=\"variants\"\n :options=\"{\n product: selectedProduct?._id,\n }\"\n :skeleton=\"{\n structure: [\n { block: 'text', size: 'small' },\n { block: 'text', size: 'medium' },\n { block: 'text', size: 'small' }\n ]\n }\"\n :states=\"{\n empty: {\n title: 'No variants',\n description: 'Create your first variant'\n }\n }\"\n v-slot=\"{ items }\"\n >\n <div class=\"gap-thin flex flex-column\">\n <div \n v-for=\"(variant, index) in items\" \n :key=\"index\"\n @click=\"addVariantToOrder(variant)\"\n class=\"w-100 cursor-pointer hover-scale-1 bg-light pd-small radius-small flex-v-center flex-nowrap flex gap-thin\"\n >\n <div v-if=\"variant.images && variant.images.length\" class=\"aspect-1x1 h-3r radius-small o-hidden\">\n <img \n :src=\"(FILE_SERVER_URL || '') + variant.images[0]\" \n class=\"w-100 h-100 object-fit-cover\"\n />\n </div>\n <div>\n <p class=\"t-medium\">{{ variant.name || 'Default variant' }}</p>\n <p v-if=\"variant.attributes && variant.attributes.length\" class=\"t-small t-transp\">\n {{ variant.attributes.map(attr => `${attr.name}: ${attr.value}`).join(', ') }}\n </p>\n </div>\n <p class=\"mn-l-auto\">{{ formatPrice(variant.price || variant.cost) }}</p>\n </div>\n </div>\n </Feed>\n </Popup>\n\n <Block\n v-if=\"tabOrderCreate === 'positions'\"\n title=\"Positions\"\n :actions=\"[{\n label: '+',\n function: () => openProductsPopup()\n }]\"\n class=\"mn-b-small\"\n >\n <span \n v-if=\"orders.state.current.positions.length === 0\" \n class=\"w-100\"\n >\n No positions added yet\n </span> \n\n <CardOrderItem\n v-for=\"(product, index) in orders.state.current.positions\" \n :key=\"`${product._id}_${product.variant || 'no-variant'}_${index}`\"\n :editable=\"true\" \n :productId=\"product._id\"\n :variantId=\"product.variant\"\n :images=\"product.images\"\n :name=\"product.name\"\n :quantity=\"product.quantity\"\n :unit=\"product.unit\"\n :dates=\"product.date\"\n :listing=\"product.listing\"\n :price=\"product.price\"\n :increase=\"() => incrementOrderItemQuantity(product._id, product.variant)\"\n :decrease=\"() => decrementOrderItemQuantity(product._id, product.variant)\"\n :remove=\"() => removeOrderItem(product._id, product.variant)\"\n @updateRentDates=\"(productId, variantId, dates) => updateOrderRentDates(productId, variantId, dates)\"\n class=\"mn-b-thin pd-thin radius-medium bg-white\"\n /> \n </Block>\n\n <FormSelectCustomer\n v-if=\"tabOrderCreate === 'customer'\"\n v-model:customer=\"orders.state.current.customer\"\n class=\"mn-b-semi\"\n />\n\n <FormDelivery \n v-if=\"tabOrderCreate === 'delivery'\" \n :order=\"orders.state.current\"\n :organization=\"orderOrganization[0]\" \n />\n\n <FormPayment \n v-if=\"tabOrderCreate === 'payment'\"\n :order=\"orders.state.current\" \n :organization=\"orderOrganization[0]\" \n />\n\n\n <Block\n class=\"mn-b-semi\"\n >\n <div class=\"h3 flex\">\n <span class=\"mn-r-auto t-transp\">In total</span>\n <span>{{ cartTotalPrice }} {{returnCurrency()}} </span >\n </div>\n </Block>\n</div>\n\n\n</template>\n\n<script setup=\"props\">\n import { computed, ref, defineProps, onMounted, reactive, toRefs, watch, getCurrentInstance } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n\n\n import Field from '@martyrs/src/components/Field/Field.vue'\n import Button from \"@martyrs/src/components/Button/Button.vue\"; \n import Tab from '@martyrs/src/components/Tab/Tab.vue'\n import Popup from '@martyrs/src/components/Popup/Popup.vue';\n\timport Block from '@martyrs/src/components/Block/Block.vue';\n import Feed from '@martyrs/src/components/Feed/Feed.vue'\n\n import CardOrderItem from '@martyrs/src/modules/orders/components/blocks/CardOrderItem.vue'\n import CardPosition from '@martyrs/src/modules/products/components/blocks/CardPosition.vue';\n import CardUser from '@martyrs/src/modules/auth/views/components/blocks/CardUser.vue'\n\n import BlockSearch from '@martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue'\n\n import FormSelectCustomer from '@martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue'\n import FormDelivery from '@martyrs/src/modules/orders/components/sections/FormDelivery.vue'\n import FormPayment from '@martyrs/src/modules/orders/components/sections/FormPayment.vue'\n\n // Import your store\n import * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n import * as orders from '@martyrs/src/modules/orders/store/orders.js';\n import * as organizations from '@martyrs/src/modules/organizations/store/organizations.js';\n import * as products from '@martyrs/src/modules/products/store/products.js';\n import variants from '@martyrs/src/modules/products/store/variants.store.js';\n\n import customers from '@martyrs/src/modules/orders/store/customers.store';\n \n import { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';\n\t\n // Accessing router\n const route = useRoute()\n const router = useRouter()\n const { proxy } = getCurrentInstance()\n const { formatPrice } = useGlobalMixins()\n\n orders.mutations.resetOrder(orders.state.current)\n\n let cartTotalPrice = computed(() => {\n return Number(orders.state.current.positions.reduce((total, product) => {\n if (product.listing === 'rent' && product.date?.start && product.date?.end) {\n const start = new Date(product.date.start);\n const end = new Date(product.date.end);\n const days = Math.ceil(Math.abs(end - start) / (1000 * 60 * 60 * 24)) + 1;\n return total + product.price * product.quantity * days;\n } else {\n return total + product.price * product.quantity;\n }\n }, 0));\n })\n\n // Tab\n const tabOrderCreate = ref('positions')\n\n // Popup\n const isOpenProductsPopup = ref(false);\n const isVariantsPopupOpen = ref(false);\n const selectedProduct = ref(null);\n\n function openProductsPopup() {\n isOpenProductsPopup.value = true;\n }\n\n function closeProductsPopup() {\n isOpenProductsPopup.value = false;\n }\n\n function closeVariantsPopup() {\n isVariantsPopupOpen.value = false;\n selectedProduct.value = null;\n }\n\n function selectProduct(product) {\n selectedProduct.value = product;\n closeProductsPopup();\n \n // If product has only one variant, add it directly without showing popup\n if (product.variants && product.variants.length === 1) {\n addVariantToOrder(product.variants[0]);\n return;\n }\n \n // If product has multiple variants or no variants defined, show popup\n isVariantsPopupOpen.value = true;\n }\n\n function formatProductName(product, variant) {\n if (!variant || product.variants?.length === 1 && !(variant.attributes?.length))\n return product.name;\n\n const attrs = variant.attributes?.map(a => a.value).filter(Boolean);\n return attrs?.length\n ? `${product.name} / ${attrs.join(' / ')}`\n : `${product.name} / ${variant.name}`;\n }\n\n async function addVariantToOrder(variant) {\n try {\n let selectedDates = null;\n \n // Если товар для аренды, сначала выбираем даты\n if (selectedProduct.value.listing === 'rent') {\n selectedDates = await proxy.$dateSelector(\n selectedProduct.value._id,\n variant._id,\n 1,\n variant.price || selectedProduct.value.price\n );\n \n if (!selectedDates) {\n // Если отменили выбор дат, возвращаемся к выбору вариантов\n return;\n }\n }\n \n const position = {\n _id: selectedProduct.value._id,\n images: variant.images?.length > 0 ? variant.images : selectedProduct.value.images,\n name: formatProductName(selectedProduct.value, variant),\n listing: selectedProduct.value.listing,\n price: variant.price || selectedProduct.value.price,\n quantity: 1,\n unit: variant.unit || selectedProduct.value.unit,\n date: selectedDates,\n variant: variant._id,\n org_id: route.params._id\n };\n \n globals.actions.add(orders.state.current.positions, position);\n closeVariantsPopup();\n } catch (error) {\n console.error('Error adding variant to order:', error);\n }\n }\n\n\n // Функции управления позициями заказа\n function incrementOrderItemQuantity(productId, variantId) {\n const orderItem = orders.state.current.positions.find(item => \n item._id === productId && item.variant === variantId\n );\n \n if (orderItem) {\n orderItem.quantity++;\n }\n }\n\n function decrementOrderItemQuantity(productId, variantId) {\n const orderItem = orders.state.current.positions.find(item => \n item._id === productId && item.variant === variantId\n );\n \n if (orderItem) {\n orderItem.quantity--;\n \n if (orderItem.quantity < 1) {\n removeOrderItem(productId, variantId);\n }\n }\n }\n\n function removeOrderItem(productId, variantId) {\n const itemIndex = orders.state.current.positions.findIndex(item => \n item._id === productId && item.variant === variantId\n );\n \n if (itemIndex > -1) {\n orders.state.current.positions.splice(itemIndex, 1);\n }\n }\n\n function updateOrderRentDates(productId, variantId, dates) {\n const orderItem = orders.state.current.positions.find(item => \n item._id === productId && item.variant === variantId\n );\n \n if (orderItem) {\n orderItem.date = dates;\n }\n }\n\n // Data\n let order = ref(null)\n\n async function onSubmit() {\n\n orders.state.current.creator = {\n type: 'User',\n target: auth.state.user._id\n }\n\n orders.state.current.owner = {\n type: 'Organization',\n target: route.params._id,\n }\n\n orders.state.current.customer = {\n type: 'Customer',\n target: orders.state.current.customer._id || null,\n }\n\n order.value = await orders.actions.create(orders.state.current)\n }\n\n function redirectTo () {\n router.push({\n name: route.meta.context === 'backoffice' ? 'BackofficeOrderEdit' : 'OrganizationOrderEdit',\n params: { \n order: order.value._id,\n _id: route.params._id\n } \n })\n }\n\n const orderOrganization = ref({})\n\n\n\n onMounted(async() => {\n\n orderOrganization.value = await organizations.actions.read({\n _id: route.params._id,\n lookup: ['spots']\n })\n\n // await orders.actions.fetchOrder(route.params.id) // Implement this action in your store\n\n // order.value = orders.state.current\n })\n\n</script>\n\n\n<style lang=\"scss\">\n\n.vue-select {\n width: inherit;\n\n margin-right: 1rem;\n}\n.vue-select-header {\n height: 3rem;\n}\n</style>\n"],"names":["orders.mutations","orders.state","globals.actions","auth.state","orders.actions","organizations.actions"],"mappings":"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"}
|