@ozdao/prometheus-framework 0.2.30 → 0.2.31

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