@coopenomics/desktop 2.2.10 → 2025.5.2

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.
Files changed (366) hide show
  1. package/.env-example +6 -1
  2. package/.env-testnet +8 -0
  3. package/Dockerfile +12 -0
  4. package/alias-resolver.js +35 -0
  5. package/extensions/market/install.ts +78 -0
  6. package/extensions/market-admin/install.ts +42 -0
  7. package/extensions/participant/install.ts +125 -0
  8. package/extensions/powerup/install.ts +20 -0
  9. package/extensions/soviet/install.ts +83 -0
  10. package/package.json +14 -7
  11. package/quasar.config.cjs +28 -15
  12. package/src/app/App.vue +44 -73
  13. package/src/app/layouts/default.vue +40 -0
  14. package/src/app/layouts/useDefaultLayoutLogic.ts +59 -0
  15. package/src/app/providers/router.ts +4 -3
  16. package/src/app/providers/routes/index.ts +19 -34
  17. package/src/app/styles/style.css +4 -0
  18. package/src/boot/init.ts +6 -0
  19. package/src/boot/sentry.ts +14 -14
  20. package/src/desktops/index.ts +0 -6
  21. package/src/entities/Account/model/index.ts +1 -1
  22. package/src/entities/Agenda/api/index.ts +20 -0
  23. package/src/entities/Agenda/index.ts +2 -0
  24. package/src/entities/Agenda/model/index.ts +2 -0
  25. package/src/entities/Agenda/model/store.ts +36 -0
  26. package/src/entities/Agenda/model/types.ts +4 -0
  27. package/src/entities/Branch/model/index.ts +1 -1
  28. package/src/entities/Desktop/api/index.ts +16 -1
  29. package/src/entities/Desktop/model/store.ts +112 -106
  30. package/src/entities/Desktop/model/types.ts +14 -1
  31. package/src/entities/Document/api/index.ts +24 -0
  32. package/src/entities/Document/index.ts +2 -0
  33. package/src/entities/Document/model/store.ts +117 -0
  34. package/src/entities/Document/model/types.ts +18 -0
  35. package/src/entities/Meet/api/index.ts +58 -0
  36. package/src/entities/Meet/index.ts +2 -0
  37. package/src/entities/Meet/model/store.ts +72 -0
  38. package/src/entities/Meet/types/index.ts +7 -0
  39. package/src/entities/Payment/api/index.ts +20 -0
  40. package/src/entities/Payment/model/index.ts +2 -0
  41. package/src/entities/Payment/model/store.ts +62 -0
  42. package/src/entities/Payment/model/types.ts +7 -0
  43. package/src/entities/Session/model/store.ts +4 -4
  44. package/src/entities/System/model/store.ts +1 -1
  45. package/src/entities/User/model/stores.ts +3 -1
  46. package/src/entities/Wallet/api/index.ts +15 -33
  47. package/src/entities/Wallet/model/stores.ts +3 -23
  48. package/src/entities/Wallet/model/types.ts +2 -3
  49. package/src/env.d.ts +2 -0
  50. package/src/features/Agreementer/SignAgreementDialog/ui/SignAgreementDialog.vue +1 -1
  51. package/src/features/Branch/SelectBranch/index.ts +2 -0
  52. package/src/features/Branch/SelectBranch/ui/SelectBranchOverlay.vue +52 -105
  53. package/src/features/Decision/CreateProject/ui/CreateProjectFreeDecisionButton.vue +1 -1
  54. package/src/features/Decision/ParticipantApplication/model/index.ts +38 -0
  55. package/src/features/FreeDecision/CreateProject/model/index.ts +92 -0
  56. package/src/features/FreeDecision/CreateProject/ui/CreateProjectFreeDecisionButton.vue +51 -0
  57. package/src/features/FreeDecision/CreateProject/ui/index.ts +1 -0
  58. package/src/features/FreeDecision/GenerateDecision/index.ts +1 -0
  59. package/src/features/FreeDecision/GenerateDecision/model/index.ts +36 -0
  60. package/src/features/FreeDecision/index.ts +2 -0
  61. package/src/features/Meet/CloseMeetWithDecision/index.ts +1 -0
  62. package/src/features/Meet/CloseMeetWithDecision/model/index.ts +92 -0
  63. package/src/features/Meet/CreateMeet/index.ts +2 -0
  64. package/src/features/Meet/CreateMeet/model/index.ts +65 -0
  65. package/src/features/Meet/CreateMeet/ui/CreateMeet.vue +34 -0
  66. package/src/features/Meet/CreateMeet/ui/CreateMeetForm.vue +136 -0
  67. package/src/features/Meet/CreateMeet/ui/index.ts +2 -0
  68. package/src/features/Meet/GenerateAgenda/index.ts +1 -0
  69. package/src/features/Meet/GenerateAgenda/model/index.ts +18 -0
  70. package/src/features/Meet/GenerateBallot/index.ts +1 -0
  71. package/src/features/Meet/GenerateBallot/model/index.ts +18 -0
  72. package/src/features/Meet/GenerateNotification/index.ts +1 -0
  73. package/src/features/Meet/GenerateNotification/model/index.ts +18 -0
  74. package/src/features/Meet/GenerateSovietDecision/index.ts +1 -0
  75. package/src/features/Meet/GenerateSovietDecision/model/index.ts +48 -0
  76. package/src/features/Meet/MeetDetailsManagement/index.ts +1 -0
  77. package/src/features/Meet/MeetDetailsManagement/model/index.ts +121 -0
  78. package/src/features/Meet/RestartMeet/index.ts +2 -0
  79. package/src/features/Meet/RestartMeet/model/index.ts +54 -0
  80. package/src/features/Meet/RestartMeet/ui/RestartMeet.vue +46 -0
  81. package/src/features/Meet/RestartMeet/ui/RestartMeetForm.vue +92 -0
  82. package/src/features/Meet/RestartMeet/ui/index.ts +2 -0
  83. package/src/features/Meet/VoteOnMeet/index.ts +1 -0
  84. package/src/features/Meet/VoteOnMeet/model/index.ts +18 -0
  85. package/src/features/Payment/SetStatus/api/index.ts +20 -0
  86. package/src/features/Payment/SetStatus/index.ts +1 -0
  87. package/src/features/Payment/SetStatus/model/index.ts +30 -0
  88. package/src/features/{Order → Payment}/SetStatus/ui/SetOrderPaidStatusButton/SetOrderPaidStatusButton.vue +7 -3
  89. package/src/features/PaymentMethod/AddPaymentMethod/model/index.ts +2 -2
  90. package/src/features/PaymentMethod/AddPaymentMethod/ui/AddPaymentButton.vue +1 -1
  91. package/src/features/PaymentMethod/DeletePaymentMethod/model/index.ts +1 -1
  92. package/src/features/PaymentMethod/DeletePaymentMethod/ui/DeletePaymentMethodButton.vue +3 -1
  93. package/src/features/Request/CancelRequest/ui/CancelButton.vue +1 -1
  94. package/src/features/Request/ConfirmRecieveOnRequest/ui/ConfirmRecieveOnRequest.vue +1 -1
  95. package/src/features/Request/CreateParentOffer/ui/CreateParentOfferForm/CreateParentOfferForm.vue +4 -5
  96. package/src/features/Request/CreateParentOffer/ui/ImageUploaderWithPreview/ImageUploaderWithPreview.vue +5 -3
  97. package/src/features/Request/DisputeOnRequest/ui/DisputeOnRequestButton.vue +1 -1
  98. package/src/features/Request/ModerateRequest/ui/ModerateRequestButton.vue +2 -2
  99. package/src/features/Request/PublishRequest/ui/PublishRequestButton.vue +1 -1
  100. package/src/features/Request/RecieveOnRequest/ui/RecieveOnRequestButton.vue +1 -1
  101. package/src/features/Request/UnpublishRequest/ui/UnpublishRequestButton.vue +1 -1
  102. package/src/features/Union/AddCooperative/model/index.ts +5 -5
  103. package/src/features/Union/AddCooperative/ui/AddCooperativeForm.vue +6 -9
  104. package/src/features/User/AddUser/ui/AddUserDialog/AddUserDialog.vue +4 -4
  105. package/src/features/User/LoginUser/model/index.ts +3 -7
  106. package/src/features/User/LoginUser/ui/LoginForm/LoginForm.vue +0 -6
  107. package/src/features/User/Logout/model/index.ts +2 -1
  108. package/src/features/Wallet/DepositToWallet/ui/DepositButton/DepositButton.vue +10 -7
  109. package/src/features/Wallet/WithdrawFromWallet/ui/withdrawButton.vue +7 -6
  110. package/src/pages/Blank/index.ts +1 -0
  111. package/src/pages/Contacts/ContactsPage.vue +64 -0
  112. package/src/{widgets/Cooperative/Contacts → pages/Cooperative/ChangeContacts}/ui/index.ts +0 -1
  113. package/src/{widgets/Cooperative/Contributions/ui/ChangeContributions.vue → pages/Cooperative/ChangeRegisterPayments/ui/ChangeRegisterPayments.vue} +12 -11
  114. package/src/pages/Cooperative/ChangeRegisterPayments/ui/index.ts +1 -0
  115. package/src/pages/Cooperative/ListOfAgenda/index.ts +1 -0
  116. package/src/pages/Cooperative/ListOfAgenda/ui/ListOfAgendaQuestions.vue +118 -0
  117. package/src/pages/Cooperative/ListOfAgenda/ui/index.ts +1 -0
  118. package/src/pages/Cooperative/ListOfDocuments/ListOfDocumentsPage.vue +24 -0
  119. package/src/pages/Cooperative/ListOfMeets/model/index.ts +1 -0
  120. package/src/pages/Cooperative/ListOfMeets/model/model.ts +117 -0
  121. package/src/pages/Cooperative/ListOfMeets/ui/ListOfMeetsPage.vue +90 -0
  122. package/src/pages/Cooperative/ListOfMeets/ui/index.ts +1 -0
  123. package/src/pages/Cooperative/ListOfOrders/index.ts +1 -1
  124. package/src/pages/Cooperative/ListOfOrders/ui/ListOfOrdersPage.vue +0 -4
  125. package/src/pages/Cooperative/ListOfParticipants/ui/ListOfParticipantsPage.vue +61 -10
  126. package/src/pages/Cooperative/ListOfParticipants/ui/index.ts +1 -1
  127. package/src/pages/Cooperative/MeetDetails/ui/MeetDetailsPage.vue +88 -0
  128. package/src/pages/Cooperative/MeetDetails/ui/index.ts +1 -0
  129. package/src/pages/Cooperative/MemberBranchList/ui/index.ts +1 -0
  130. package/src/pages/Cooperative/Payments/index.ts +1 -0
  131. package/src/pages/Cooperative/Payments/ui/PaymentsPage.vue +7 -0
  132. package/src/pages/{ExtStore → ExtensionStore}/ExtensionPage/ExtensionPage.vue +51 -24
  133. package/src/pages/{ExtStore → ExtensionStore}/ExtensionsShowcase/ExtensionsShowcase.vue +2 -2
  134. package/src/pages/{ExtStore → ExtensionStore}/InstalledExtensions/InstalledExtensions.vue +2 -2
  135. package/src/pages/Marketplace/OfferPage/ui/OfferPage.vue +1 -1
  136. package/src/pages/Marketplace/Showcase/ui/ShowcasePage.vue +1 -1
  137. package/src/pages/Marketplace/SuppliesList/ui/SuppliesListPage.vue +1 -1
  138. package/src/pages/Marketplace/UserParentOffers/ui/UserParentOffersPage.vue +1 -1
  139. package/src/pages/Marketplace/UserSuppliesList/ui/UserSuppliesListPage.vue +1 -1
  140. package/src/pages/PermissionDenied/index.ts +1 -0
  141. package/src/pages/Registrator/SignUp/EmailInput.vue +4 -3
  142. package/src/pages/Registrator/SignUp/GenerateAccount.vue +2 -3
  143. package/src/pages/Registrator/SignUp/PayInitial.vue +1 -1
  144. package/src/pages/Registrator/SignUp/ReadStatement.vue +2 -2
  145. package/src/pages/Registrator/SignUp/SelectBranch.vue +2 -2
  146. package/src/pages/Registrator/SignUp/SignStatement.vue +2 -2
  147. package/src/pages/Registrator/SignUp/SignUp.vue +5 -12
  148. package/src/pages/Registrator/SignUp/WaitingRegistration.vue +1 -5
  149. package/src/pages/Registrator/SignUp/Welcome.vue +6 -3
  150. package/src/pages/Union/ConnectionAgreement/index.ts +1 -0
  151. package/src/pages/Union/ListOfCooperatives/ui/UnionPageListOfCooperatives.vue +139 -6
  152. package/src/pages/User/DocumentsPage/UserDocumentsPage.vue +23 -0
  153. package/src/pages/User/DocumentsPage/index.ts +1 -0
  154. package/src/pages/User/PaymentsPage/ui/UserPayments.vue +11 -0
  155. package/src/pages/User/PaymentsPage/ui/index.ts +1 -0
  156. package/src/pages/User/ProfilePage/index.ts +1 -0
  157. package/src/pages/User/ProfilePage/ui/ProfilePage.vue +114 -0
  158. package/src/pages/User/ProfilePage/ui/index.ts +1 -0
  159. package/src/pages/User/SettingsPage/ui/index.ts +1 -1
  160. package/src/pages/User/WalletPage/index.ts +1 -0
  161. package/src/pages/User/WalletPage/ui/WalletPage.vue +72 -0
  162. package/src/pages/User/WalletPage/ui/index.ts +1 -0
  163. package/src/processes/init-app/index.ts +28 -0
  164. package/src/processes/init-installed-extensions/index.ts +25 -0
  165. package/src/processes/init-wallet/index.ts +40 -0
  166. package/src/processes/navigation-guard-setup/index.ts +45 -0
  167. package/src/processes/process-decisions/index.ts +275 -0
  168. package/src/processes/select-branch/index.ts +80 -0
  169. package/src/processes/watch-branch-overlay/index.ts +38 -0
  170. package/src/processes/watch-desktop-health/index.ts +33 -0
  171. package/src/shared/api/alerts.ts +2 -6
  172. package/src/shared/api/axios.ts +5 -5
  173. package/src/shared/api/client.ts +4 -4
  174. package/src/shared/api/eosio.ts +2 -2
  175. package/src/shared/api/indexDB.ts +3 -0
  176. package/src/shared/api/utils.ts +2 -2
  177. package/src/shared/config/Environment.ts +68 -0
  178. package/src/shared/config/index.ts +2 -1
  179. package/src/shared/hooks/index.ts +2 -0
  180. package/src/shared/hooks/useAgendaPoints.ts +24 -0
  181. package/src/shared/hooks/useWindowSize.ts +13 -0
  182. package/src/shared/lib/composables/useDisplayName.ts +34 -0
  183. package/src/shared/lib/navigation/index.ts +2 -0
  184. package/src/shared/lib/navigation/routeUtils.ts +51 -0
  185. package/src/shared/lib/navigation/useBackButton.ts +63 -0
  186. package/src/shared/lib/proxy/dicebear-collection.cjs +21 -0
  187. package/src/shared/lib/proxy/dicebear-core.cjs +20 -0
  188. package/src/shared/lib/proxy/email-regex.cjs +19 -0
  189. package/src/shared/lib/utils/dates/validateDateWithinRange.ts +23 -0
  190. package/src/shared/ui/BaseDocument/BaseDocument.vue +120 -90
  191. package/src/{components/menu/blockchainStatus.vue → shared/ui/BlockchainStatusBar/BlockchainStatusBar.vue} +1 -0
  192. package/src/shared/ui/BlockchainStatusBar/index.ts +1 -0
  193. package/src/shared/ui/CardStyles/index.scss +61 -0
  194. package/src/shared/ui/ClientOnly/ClientOnly.vue +15 -0
  195. package/src/shared/ui/ClientOnly/index.ts +1 -0
  196. package/src/shared/ui/ComplexDocument/ComplexDocument.vue +31 -8
  197. package/src/shared/ui/CopyableInput/index.ts +1 -0
  198. package/src/shared/ui/CopyableInput/ui/CopyableInput.vue +62 -0
  199. package/src/shared/ui/EditableEntrepreneurCard/EditableEntrepreneurCard.vue +9 -8
  200. package/src/shared/ui/EditableIndividualCard/EditableIndividualCard.vue +10 -10
  201. package/src/shared/ui/EditableOrganizationCard/EditableOrganizationCard.vue +57 -47
  202. package/src/shared/ui/Form/Form.vue +3 -1
  203. package/src/shared/ui/InputStyles/index.scss +29 -0
  204. package/src/shared/ui/TabStyles/index.scss +53 -0
  205. package/src/shared/ui/index.ts +1 -0
  206. package/src/{components/history/AccountEvents.vue → widgets/AccountActions/AccountActionsPage.vue} +2 -2
  207. package/src/widgets/AccountActions/index.ts +1 -0
  208. package/src/widgets/BankDetailsCard/ui/BankDetailsCard.vue +2 -2
  209. package/src/widgets/BranchCard/ui/BranchCard.vue +2 -2
  210. package/src/widgets/Cooperative/Documents/ListOfDocuments/ui/DocumentCard.vue +48 -0
  211. package/src/widgets/Cooperative/Documents/ListOfDocuments/ui/DocumentsTable.vue +162 -0
  212. package/src/widgets/Cooperative/Documents/ListOfDocuments/ui/ListOfDocumentsWidget.vue +77 -120
  213. package/src/widgets/Cooperative/Documents/ListOfDocuments/ui/index.ts +3 -1
  214. package/src/widgets/Cooperative/Orders/ListOfOrders/ui/ListOfOrdersWidget.vue +135 -128
  215. package/src/widgets/Cooperative/Orders/ListOfOrders/ui/OrderCard.vue +74 -0
  216. package/src/widgets/Cooperative/Orders/ListOfOrders/ui/index.ts +2 -1
  217. package/src/widgets/Cooperative/Payments/ListOfPayments/ui/ListOfPaymentsWidget.vue +216 -0
  218. package/src/widgets/Cooperative/Payments/ListOfPayments/ui/PaymentCard.vue +73 -0
  219. package/src/widgets/Cooperative/Payments/ListOfPayments/ui/index.ts +2 -0
  220. package/src/widgets/Cooperative/Payments/index.ts +1 -0
  221. package/src/widgets/Desktop/LeftDrawerMenu/LeftDrawerMenu.vue +3 -2
  222. package/src/widgets/Desktop/SecondLevelMenuList/SecondLevelMenuList.vue +58 -91
  223. package/src/widgets/Desktop/WorkspaceMenu/WorkspaceMenu.vue +114 -59
  224. package/src/widgets/{ExtStore/ExtensionCard → ExtensionCard}/ExtensionCard.vue +12 -7
  225. package/src/widgets/Header/BackButton/BackButton.vue +25 -0
  226. package/src/widgets/Header/BackButton/index.ts +1 -0
  227. package/src/widgets/Header/CommonHeader/CooperativeSettingsHeader.vue +34 -0
  228. package/src/widgets/Header/CommonHeader/ExtstoreHeader.vue +41 -0
  229. package/src/widgets/Header/CommonHeader/Header.vue +33 -198
  230. package/src/widgets/Header/CommonHeader/HeaderStyles.scss +22 -0
  231. package/src/widgets/Header/CommonHeader/MainHeader.vue +88 -0
  232. package/src/widgets/Header/CommonHeader/UserSettingsHeader.vue +29 -0
  233. package/src/widgets/Header/CommonHeader/index.ts +1 -1
  234. package/src/widgets/Header/SettingsDropdown/SettingsDropdown.vue +0 -6
  235. package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Base/Base.vue +2 -2
  236. package/src/widgets/Meets/MeetDetailsActions/MeetDetailsActions.vue +51 -0
  237. package/src/widgets/Meets/MeetDetailsActions/index.ts +1 -0
  238. package/src/widgets/Meets/MeetDetailsActions/model.ts +46 -0
  239. package/src/widgets/Meets/MeetDetailsAgenda/MeetDetailsAgenda.vue +29 -0
  240. package/src/widgets/Meets/MeetDetailsAgenda/index.ts +1 -0
  241. package/src/widgets/Meets/MeetDetailsHeader/MeetDetailsHeader.vue +40 -0
  242. package/src/widgets/Meets/MeetDetailsHeader/index.ts +1 -0
  243. package/src/widgets/Meets/MeetDetailsVoting/MeetDetailsVoting.vue +77 -0
  244. package/src/widgets/Meets/MeetDetailsVoting/index.ts +1 -0
  245. package/src/widgets/Meets/MeetDetailsVoting/model.ts +117 -0
  246. package/src/widgets/Meets/MeetInfoCard/ui/MeetInfoCard.vue +38 -0
  247. package/src/widgets/Meets/MeetInfoCard/ui/index.ts +1 -0
  248. package/src/widgets/Meets/MeetsTable/ui/MeetsTable.vue +118 -0
  249. package/src/widgets/Meets/MeetsTable/ui/index.ts +1 -0
  250. package/src/widgets/Participants/index.ts +1 -0
  251. package/src/widgets/Participants/ui/ParticipantCard.vue +89 -0
  252. package/src/widgets/Participants/ui/ParticipantDetails.vue +79 -0
  253. package/src/widgets/Participants/ui/ParticipantsTable.vue +129 -0
  254. package/src/widgets/Participants/ui/index.ts +4 -0
  255. package/src/widgets/Questions/index.ts +3 -0
  256. package/src/widgets/Questions/ui/QuestionCard/QuestionCard.vue +109 -0
  257. package/src/widgets/Questions/ui/QuestionCard/index.ts +1 -0
  258. package/src/widgets/Questions/ui/QuestionsTable/QuestionsTable.vue +177 -0
  259. package/src/widgets/Questions/ui/QuestionsTable/index.ts +1 -0
  260. package/src/widgets/Questions/ui/VotingButtons/VotingButtons.vue +75 -0
  261. package/src/widgets/Questions/ui/VotingButtons/index.ts +1 -0
  262. package/src/widgets/Questions/ui/index.ts +3 -0
  263. package/src/widgets/RequireAgreements/index.ts +1 -0
  264. package/src/widgets/User/PaymentMethods/ui/PaymentMethods.vue +81 -85
  265. package/src-ssr/middlewares/injectEnv.ts +49 -0
  266. package/tsconfig.json +1 -1
  267. package/extensions/powerup/boot.ts +0 -17
  268. package/src/app/providers/card/store.ts +0 -42
  269. package/src/boot/branch-selector.ts +0 -40
  270. package/src/boot/init-stores.ts +0 -51
  271. package/src/boot/navigation-guards.ts +0 -46
  272. package/src/components/menu/footerMobileMenu.vue +0 -79
  273. package/src/components/soviet/index.vue +0 -76
  274. package/src/components/soviet/staff.vue +0 -274
  275. package/src/desktops/User/index.ts +0 -1
  276. package/src/desktops/User/model/index.ts +0 -329
  277. package/src/entities/Menu/model/store.ts +0 -69
  278. package/src/entities/Menu/model/types.ts +0 -11
  279. package/src/entities/Menu/ui/index.ts +0 -1
  280. package/src/entities/Order/api/index.ts +0 -14
  281. package/src/entities/Order/model/store.ts +0 -87
  282. package/src/features/Order/SetStatus/api/index.ts +0 -7
  283. package/src/features/Order/SetStatus/model/index.ts +0 -23
  284. package/src/pages/Cooperative/Contacts/ui/ContactsPage.vue +0 -7
  285. package/src/pages/Cooperative/ListOfBranches/ui/index.ts +0 -1
  286. package/src/pages/Documentor/ListOfDocuments/ListOfDocumentsPage.vue +0 -12
  287. package/src/pages/Union/Connection/index.ts +0 -1
  288. package/src/pages/_layouts/blank.vue +0 -24
  289. package/src/pages/_layouts/default.vue +0 -79
  290. package/src/types/index.ts +0 -3
  291. package/src/widgets/Commutator/Commutator.vue +0 -7
  292. package/src/widgets/Commutator/index.ts +0 -1
  293. package/src/widgets/Cooperative/Agenda/ListOfQuestions/ui/ListOfQuestions.vue +0 -273
  294. package/src/widgets/Cooperative/Agenda/ListOfQuestions/ui/index.ts +0 -1
  295. package/src/widgets/Cooperative/Contacts/ui/Contacts.vue +0 -52
  296. package/src/widgets/Cooperative/Contributions/ui/index.ts +0 -1
  297. package/src/widgets/Cooperative/Description/ui/SetDescription.vue +0 -4
  298. package/src/widgets/Cooperative/Description/ui/index.ts +0 -1
  299. package/src/widgets/Cooperative/Participants/ListOfParticipants/ui/ListOfParticipantsWidget.vue +0 -186
  300. package/src/widgets/Cooperative/Participants/ListOfParticipants/ui/index.ts +0 -1
  301. package/src/widgets/Desktop/SecondLevelMenu/SecondLevelMenu.vue +0 -59
  302. package/src/widgets/Desktop/SecondLevelMenu/index.ts +0 -1
  303. package/src/widgets/IndividualCard/ui/IndividualCard.vue +0 -170
  304. package/src/widgets/IndividualCard/ui/index.ts +0 -1
  305. package/src/widgets/OrganizationCard/ui/OrganizationCard.vue +0 -44
  306. package/src/widgets/OrganizationCard/ui/index.ts +0 -1
  307. package/src/widgets/Union/ListOfCooperatives/ui/UnionListOfCooperatives.vue +0 -136
  308. package/src/widgets/Union/ListOfCooperatives/ui/index.ts +0 -1
  309. package/src/entities/{Menu → Document}/model/index.ts +0 -0
  310. package/src/entities/{Order → Meet}/model/index.ts +0 -0
  311. package/src/entities/{Order → Payment}/index.ts +0 -0
  312. package/src/features/{Order/SetStatus → Decision/ParticipantApplication}/index.ts +0 -0
  313. package/src/{widgets/Request/SupplyOrderRequestCard → features/FreeDecision/CreateProject}/index.ts +0 -0
  314. package/src/features/{Order → Payment}/SetStatus/ui/SetOrderCompletedStatusButton/SetOrderCompletedStatusButton.vue +0 -0
  315. package/src/features/{Order → Payment}/SetStatus/ui/SetOrderCompletedStatusButton/index.ts +0 -0
  316. package/src/features/{Order → Payment}/SetStatus/ui/SetOrderPaidStatusButton/index.ts +0 -0
  317. package/src/features/{Order → Payment}/SetStatus/ui/SetOrderRefundedStatusButton/SetOrderRefundedStatusButton.vue +0 -0
  318. package/src/features/{Order → Payment}/SetStatus/ui/SetOrderRefundedStatusButton/index.ts +0 -0
  319. package/src/pages/{blank/blank.vue → Blank/BlankPage.vue} +0 -0
  320. package/src/pages/{Cooperative/Contacts/ui → Contacts}/index.ts +0 -0
  321. package/src/pages/Cooperative/{Contacts → ChangeContacts}/index.ts +0 -0
  322. package/src/{widgets/Cooperative/Contacts → pages/Cooperative/ChangeContacts}/ui/ChangeContacts.vue +0 -0
  323. package/src/pages/Cooperative/{ListOfBranches → ChangeRegisterPayments}/index.ts +0 -0
  324. package/src/pages/{Documentor → Cooperative}/ListOfDocuments/index.ts +0 -0
  325. package/src/pages/{Installer → Cooperative/ListOfMeets}/index.ts +0 -0
  326. package/src/{widgets/Cooperative/Agenda/ListOfQuestions → pages/Cooperative/MeetDetails}/index.ts +0 -0
  327. package/src/{widgets/Cooperative/Contacts → pages/Cooperative/MemberBranchList}/index.ts +0 -0
  328. package/src/pages/Cooperative/{ListOfBranches/ui/ListOfBranchesPage.vue → MemberBranchList/ui/MemberBranchListPage.vue} +0 -0
  329. package/src/pages/{ExtStore → ExtensionStore}/BaseRoute/ExtensionStoreBase.vue +0 -0
  330. package/src/pages/{ExtStore → ExtensionStore}/BaseRoute/index.ts +0 -0
  331. package/src/pages/{ExtStore → ExtensionStore}/ExtensionPage/index.ts +0 -0
  332. package/src/pages/{ExtStore → ExtensionStore}/ExtensionsShowcase/index.ts +0 -0
  333. package/src/pages/{ExtStore → ExtensionStore}/InstalledExtensions/index.ts +0 -0
  334. package/src/pages/{_layouts/permissionDenied.vue → PermissionDenied/PermissionDenied.vue} +0 -0
  335. package/src/pages/Union/{Connection/ConnectionPage.vue → ConnectionAgreement/ConnectionAgreementPage.vue} +0 -0
  336. package/src/{widgets/Cooperative/Contributions → pages/Union/InstallCooperative}/index.ts +0 -0
  337. package/src/pages/{Installer → Union/InstallCooperative}/ui/InstallCooperativePage.vue +0 -0
  338. package/src/pages/{Installer → Union/InstallCooperative}/ui/index.ts +0 -0
  339. package/src/{widgets/Cooperative/Participants/ListOfParticipants → pages/User/PaymentsPage}/index.ts +0 -0
  340. package/src/{components/history → widgets/AccountActions}/AccountLink.vue +0 -0
  341. package/src/{components/history → widgets/AccountActions}/ActionCell.vue +0 -0
  342. package/src/{components/history → widgets/AccountActions}/DataCell.vue +0 -0
  343. package/src/widgets/{IndividualCard → Cooperative/Payments/ListOfPayments}/index.ts +0 -0
  344. package/src/widgets/{ExtStore/ExtensionCard → ExtensionCard}/index.ts +0 -0
  345. package/src/widgets/{Request → Marketplace}/CreateChildOrderCard/CreateChildOrderCard.vue +0 -0
  346. package/src/widgets/{Request → Marketplace}/CreateChildOrderCard/index.ts +0 -0
  347. package/src/widgets/{Request → Marketplace}/RequestCard/RequestCard.vue +0 -0
  348. package/src/widgets/{Request → Marketplace}/RequestCard/index.ts +0 -0
  349. package/src/{entities/Menu → widgets/Marketplace/SupplyOrderRequestCard}/index.ts +1 -1
  350. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/model/index.ts +0 -0
  351. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/model/types.ts +0 -0
  352. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Base/index.ts +0 -0
  353. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/EightStep.vue +0 -0
  354. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/FifthStep.vue +0 -0
  355. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/FirstStep.vue +0 -0
  356. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/FourthStep.vue +0 -0
  357. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/SecondStep.vue +0 -0
  358. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/SeventhStep.vue +0 -0
  359. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/SixthStep.vue +0 -0
  360. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/ThirdStep.vue +0 -0
  361. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/Steps/index.ts +0 -0
  362. /package/src/widgets/{Request → Marketplace}/SupplyOrderRequestCard/ui/index.ts +0 -0
  363. /package/src/widgets/{OrganizationCard → Meets/MeetInfoCard}/index.ts +0 -0
  364. /package/src/widgets/{Union/ListOfCooperatives → Meets/MeetsTable}/index.ts +0 -0
  365. /package/src/widgets/{Agreementer/RequireAgreements → RequireAgreements}/ui/RequireAgreements.vue +0 -0
  366. /package/src/widgets/{Agreementer/RequireAgreements → RequireAgreements}/ui/index.ts +0 -0
@@ -0,0 +1,34 @@
1
+ import { computed } from 'vue';
2
+ import type { IEntrepreneurData, IIndividualData, IOrganizationData } from 'src/shared/lib/types/user/IUserData';
3
+
4
+ export function useDisplayName(privateData: IEntrepreneurData | IIndividualData | IOrganizationData | null) {
5
+ const displayName = computed(() => {
6
+ if (!privateData) return '';
7
+
8
+ if ('short_name' in privateData) {
9
+ // Это организация
10
+ return privateData.short_name;
11
+ } else if ('first_name' in privateData && 'last_name' in privateData) {
12
+ // Это физлицо или ИП
13
+ return `${privateData.last_name} ${privateData.first_name} ${privateData.middle_name || ''}`.trim();
14
+ }
15
+
16
+ return '';
17
+ });
18
+
19
+ const isIP = computed(() => {
20
+ if (!privateData) return false;
21
+
22
+ // Проверка на предпринимателя - наличие полей details.inn и details.ogrn, но нет short_name
23
+ return !('short_name' in privateData) &&
24
+ 'details' in privateData &&
25
+ privateData.details &&
26
+ 'inn' in privateData.details &&
27
+ 'ogrn' in privateData.details;
28
+ });
29
+
30
+ return {
31
+ displayName,
32
+ isIP
33
+ };
34
+ }
@@ -0,0 +1,2 @@
1
+ export * from './routeUtils'
2
+ export * from './useBackButton'
@@ -0,0 +1,51 @@
1
+ import { RouteLocationNormalizedLoaded } from 'vue-router'
2
+
3
+ /**
4
+ * Получает глубину текущего маршрута
5
+ *
6
+ * @param route Текущий маршрут
7
+ * @returns Глубина маршрута (количество уровней вложенности)
8
+ */
9
+ export function getRouteDepth(route: RouteLocationNormalizedLoaded): number {
10
+ return route.matched?.length || 0
11
+ }
12
+
13
+ /**
14
+ * Получает родительский маршрут для текущего маршрута
15
+ *
16
+ * @param route Текущий маршрут
17
+ * @returns Родительский маршрут или null, если его нет
18
+ */
19
+ export function getParentRoute(route: RouteLocationNormalizedLoaded) {
20
+ const matched = route.matched || []
21
+ if (matched.length < 2) {
22
+ return null
23
+ }
24
+
25
+ return matched[matched.length - 2]
26
+ }
27
+
28
+ /**
29
+ * Проверяет, есть ли у маршрута родительский маршрут
30
+ *
31
+ * @param route Текущий маршрут
32
+ * @returns true, если у маршрута есть родитель, иначе false
33
+ */
34
+ export function hasParentRoute(route: RouteLocationNormalizedLoaded): boolean {
35
+ return getParentRoute(route) !== null
36
+ }
37
+
38
+ /**
39
+ * Получает заголовок маршрута из его метаданных
40
+ *
41
+ * @param route Маршрут
42
+ * @param defaultTitle Заголовок по умолчанию, если в маршруте не указан
43
+ * @returns Заголовок маршрута
44
+ */
45
+ export function getRouteTitle(route: RouteLocationNormalizedLoaded | null, defaultTitle = 'Назад'): string {
46
+ if (!route || !route.meta || !route.meta.title) {
47
+ return defaultTitle
48
+ }
49
+
50
+ return route.meta.title as string
51
+ }
@@ -0,0 +1,63 @@
1
+ import { onMounted, onUnmounted } from 'vue'
2
+ import { useRouter } from 'vue-router'
3
+ import { useDesktopStore } from 'src/entities/Desktop/model'
4
+ import type { IBackNavigationButton } from 'src/entities/Desktop/model/types'
5
+
6
+ interface BackButtonOptions {
7
+ text: string
8
+ routeName?: string
9
+ params?: Record<string, string>
10
+ componentId: string
11
+ onClick?: () => void
12
+ }
13
+
14
+ /**
15
+ * Хук для работы с кнопкой навигации "назад"
16
+ *
17
+ * @param options - объект с настройками кнопки
18
+ * @returns Функции для управления кнопкой
19
+ */
20
+ export function useBackButton(options: BackButtonOptions) {
21
+ const router = useRouter()
22
+ const desktopStore = useDesktopStore()
23
+
24
+ // Устанавливаем кнопку навигации назад
25
+ function setBackButton() {
26
+ // Формируем данные для кнопки
27
+ const button: IBackNavigationButton = {
28
+ text: options.text,
29
+ componentId: options.componentId,
30
+ onClick: options.onClick || (() => {
31
+ if (options.routeName) {
32
+ router.push({
33
+ name: options.routeName,
34
+ params: options.params || {}
35
+ })
36
+ } else {
37
+ router.back()
38
+ }
39
+ })
40
+ }
41
+
42
+ desktopStore.setBackNavigationButton(button)
43
+ }
44
+
45
+ // Удаляем кнопку навигации назад
46
+ function removeBackButton() {
47
+ desktopStore.removeBackNavigationButton(options.componentId)
48
+ }
49
+
50
+ // Автоматически устанавливаем и удаляем кнопку
51
+ onMounted(() => {
52
+ setBackButton()
53
+ })
54
+
55
+ onUnmounted(() => {
56
+ removeBackButton()
57
+ })
58
+
59
+ return {
60
+ setBackButton,
61
+ removeBackButton
62
+ }
63
+ }
@@ -0,0 +1,21 @@
1
+ // Прокси-файл для @dicebear/collection
2
+ let cachedModule = null;
3
+
4
+ async function loadModule() {
5
+ if (!cachedModule) {
6
+ cachedModule = await import('@dicebear/collection');
7
+ }
8
+ return cachedModule;
9
+ }
10
+
11
+ // Экспортируем пустой объект для CommonJS
12
+ // В SSR мы можем проверять наличие функций перед их использованием
13
+ module.exports = {
14
+ loadModule,
15
+ // Добавляем заглушки для основных стилей
16
+ thumbs: {},
17
+ lorelei: {},
18
+ bottts: {},
19
+ avataaars: {},
20
+ // Другие стили можно добавить при необходимости
21
+ };
@@ -0,0 +1,20 @@
1
+ // Прокси-файл для @dicebear/core
2
+ let cachedModule = null;
3
+
4
+ async function loadModule() {
5
+ if (!cachedModule) {
6
+ cachedModule = await import('@dicebear/core');
7
+ }
8
+ return cachedModule;
9
+ }
10
+
11
+ // Экспортируем пустой объект для CommonJS
12
+ // В SSR мы можем проверять наличие функций перед их использованием
13
+ module.exports = {
14
+ loadModule,
15
+ // Добавляем заглушки для основных функций
16
+ createAvatar: async function(...args) {
17
+ const module = await loadModule();
18
+ return module.createAvatar(...args);
19
+ }
20
+ };
@@ -0,0 +1,19 @@
1
+ // CJS прокси для email-regex
2
+ const originalModule = require('email-regex');
3
+
4
+ // Преобразуем default export из ESM в CJS
5
+ module.exports = function emailRegex(options = {}) {
6
+ // Проверяем, является ли оригинальный модуль функцией или объектом с default
7
+ if (typeof originalModule === 'function') {
8
+ return originalModule(options);
9
+ } else if (originalModule && typeof originalModule.default === 'function') {
10
+ return originalModule.default(options);
11
+ } else {
12
+ // Запасная реализация, если что-то пошло не так
13
+ const exact = options && options.exact;
14
+ const pattern = exact
15
+ ? /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
16
+ : /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/g;
17
+ return pattern;
18
+ }
19
+ };
@@ -0,0 +1,23 @@
1
+ import moment from 'moment-with-locales-es6';
2
+
3
+ export function validateDateWithinRange(yearsAgo, yearsAhead = 0) {
4
+ return (val) => {
5
+ const inputDate = moment(val, 'YYYY/MM/DD HH:mm', true); // указание формата для парсинга
6
+ const lowerLimit = moment().subtract(Math.abs(yearsAgo), 'years'); // Предел в прошлом
7
+ const upperLimit = moment().add(Math.abs(yearsAhead), 'years'); // Предел в будущем
8
+
9
+ if (!inputDate.isValid()) {
10
+ return 'Неверный формат даты';
11
+ }
12
+
13
+ if (inputDate.isBefore(lowerLimit)) {
14
+ return `Дата не может быть раньше ${lowerLimit.format('YYYY/MM/DD HH:mm')}`;
15
+ }
16
+
17
+ if (inputDate.isAfter(upperLimit)) {
18
+ return `Дата не может быть позже ${upperLimit.format('YYYY/MM/DD HH:mm')}`;
19
+ }
20
+
21
+ return true;
22
+ };
23
+ }
@@ -1,5 +1,6 @@
1
1
  <template lang="pug">
2
- q-card(style="word-break: break-all !important; white-space: normal !important;").q-pa-md.dynamic-padding
2
+ q-card(:flat="isMobile" style="word-break: break-all !important; white-space: normal !important;").dynamic-padding
3
+
3
4
  div(v-if="loading").full-width.text-center
4
5
  div(style="margin:auto;").flex.q-pa-sm.full-width.text-center
5
6
  q-spinner
@@ -7,6 +8,7 @@ q-card(style="word-break: break-all !important; white-space: normal !important;"
7
8
  div(v-if="!loading")
8
9
  div(v-html="safeHtml").description.q-pa-xs
9
10
  div.row.q-mt-lg.q-pa-sm.justify-center
11
+
10
12
  q-card(style="word-break: break-all !important; text-wrap: pretty;" flat).col-md-8.col-xs-12.q-pa-sm.verify-card
11
13
  div.q-mr-lg.q-mt-md
12
14
  q-badge(:color="doc.hash == regeneratedHash ? 'teal' : 'red'").text-center.q-pa-xs
@@ -14,51 +16,72 @@ q-card(style="word-break: break-all !important; white-space: normal !important;"
14
16
  span контрольная сумма
15
17
  p.q-mr-lg.q-ml-lg.text-grey {{ doc.hash }}
16
18
 
17
- div.q-mr-lg.q-mt-md
18
- q-badge(:color="signature_verified ? 'teal' : 'red'").text-center.q-pa-xs
19
- q-icon(:name="signature_verified ? 'check_circle' : 'cancel'" ).q-mr-sm
20
- span цифровая подпись
21
- p.q-mr-lg.q-ml-lg.text-grey {{ actionDocumentData?.document?.signature }}
22
-
23
- div.q-mr-lg.q-mt-md
24
- q-badge(:color="signature_verified ? 'teal' : 'red'").text-center.q-pa-xs
25
- q-icon(:name="signature_verified ? 'check_circle' : 'cancel'" ).q-mr-sm
26
- span публичный ключ
27
- p.q-mr-lg.q-ml-lg.text-grey {{ actionDocumentData?.document?.public_key }}
28
-
29
- div.text-center.q-gutter-sm
19
+ // Показываем все подписи (если это агрегат документа)
20
+ template(v-if="documentAggregate && documentAggregate.signatures && documentAggregate.signatures.length > 0")
21
+ div.q-mr-lg.q-mt-md
22
+ q-badge(:color="hasInvalidSignature ? 'red' : 'teal'").text-center.q-pa-xs
23
+ q-icon(:name="hasInvalidSignature ? 'cancel' : 'verified'").q-mr-sm
24
+ span Подписи ({{ documentAggregate.signatures.length }})
25
+
26
+ // Список всех подписей
27
+ q-list(bordered separator dense)
28
+ q-expansion-item(
29
+ v-for="(signature, index) in documentAggregate.signatures"
30
+ :key="index"
31
+ :label="`Подпись ${index + 1}: ${getSignerName(signature.signer)}`"
32
+ header-class="signature-header"
33
+ dense
34
+ )
35
+ q-card(flat)
36
+ q-card-section
37
+ div.q-mb-sm
38
+ q-badge(:color="signatures_verified[index] ? 'teal' : 'red'").text-center.q-pa-xs
39
+ span Подписант
40
+ p.q-mt-sm.q-ml-lg {{ getSignerName(signature.signer) }}
41
+
42
+ div(v-if="signature.public_key").q-mb-sm
43
+ q-badge(:color="signatures_verified[index] ? 'teal' : 'red'").text-center.q-pa-xs
44
+ span Публичный ключ
45
+ p.q-mt-sm.q-ml-lg {{ signature.public_key }}
46
+
47
+ div(v-if="signature.signature").q-mb-sm
48
+ q-badge(:color="signatures_verified[index] ? 'teal' : 'red'").text-center.q-pa-xs
49
+ span Цифровая подпись
50
+ p.q-mt-sm.q-ml-lg {{ signature.signature }}
51
+
52
+ div.q-mt-md
53
+ q-badge(:color="signatures_verified[index] ? 'teal' : 'red'").text-center.q-pa-xs
54
+ q-icon(:name="signatures_verified[index] ? 'check_circle' : 'cancel'").q-mr-sm
55
+ span Статус подписи: {{ signatures_verified[index] ? 'Верифицирована' : 'Не верифицирована' }}
56
+
57
+ div.text-center.q-gutter-sm.q-mt-md
30
58
  q-btn(size="sm" color="primary" icon="download" @click="download") скачать
31
59
  //- q-btn(size="sm" color="primary" icon="download" @click="download2") скачать2
32
-
33
60
  q-btn(size="sm" color="primary" icon="fa-solid fa-check-double" @click="regenerate" :loading="onRegenerate") сверить
34
61
 
35
- </template>
36
62
 
63
+ </template>
37
64
  <script setup lang="ts">
38
- import { ref, computed } from 'vue'
39
- import { Cooperative, SovietContract } from 'cooptypes'
65
+ import { ref, computed, onMounted } from 'vue'
40
66
  import { Signature, PublicKey } from '@wharfkit/antelope';
41
67
  import { useGlobalStore } from 'src/shared/store';
42
68
  import DOMPurify from 'dompurify';
43
69
  import { DigitalDocument } from 'src/shared/lib/document';
44
70
  import { FailAlert, SuccessAlert } from 'src/shared/api';
71
+ import { getNameFromUserData } from 'src/shared/lib/utils/getNameFromUserData';
72
+ import { useWindowSize } from 'src/shared/hooks';
45
73
 
46
74
  const props = defineProps({
47
- action: {
48
- type: Object as () => Cooperative.Blockchain.IExtendedAction,
49
- required: true,
50
- },
51
- doc: {
52
- type: Object as () => Cooperative.Document.IGeneratedDocument,
75
+ documentAggregate: {
76
+ type: Object,
53
77
  required: true
54
78
  }
55
79
  })
56
80
 
57
- const actionDocumentData = ref(props.action.data as SovietContract.Actions.Registry.NewSubmitted.INewSubmitted)
58
- const doc = ref(props.doc)
81
+ const doc = computed(() => props.documentAggregate.rawDocument)
59
82
  const loading = ref(false)
60
- const signature_verified = ref(false)
61
-
83
+ const signatures_verified = ref<boolean[]>([])
84
+ const { isMobile } = useWindowSize()
62
85
  const regeneratedHash = ref()
63
86
  const onRegenerate = ref(false)
64
87
  const regenerated = ref()
@@ -89,79 +112,77 @@ const safeHtml = computed(() => sanitizeHtml(doc.value.html));
89
112
 
90
113
 
91
114
  const hashBuffer = async () => {
92
- // Декодирование из base64
93
- const binaryString = window.atob(doc.value.binary.toString());
94
-
95
- const len = binaryString.length;
96
-
97
- const data = new Uint8Array(len);
98
- for (let i = 0; i < len; i++) {
99
- data[i] = binaryString.charCodeAt(i);
115
+ try {
116
+ // Декодирование из base64
117
+ const binaryString = atob(doc.value.binary);
118
+ const len = binaryString.length;
119
+ const data = new Uint8Array(len);
120
+
121
+ for (let i = 0; i < len; i++) {
122
+ data[i] = binaryString.charCodeAt(i);
123
+ }
124
+
125
+ // Вычисление хэша из декодированных бинарных данных
126
+ regeneratedHash.value = (await useGlobalStore().hashMessage(data)).toUpperCase();
127
+ console.log('Хэш успешно вычислен:', regeneratedHash.value);
128
+ } catch (error) {
129
+ console.error('Ошибка при вычислении хэша:', error);
100
130
  }
101
-
102
- // Вычисление хэша из декодированных бинарных данных
103
- regeneratedHash.value = (await useGlobalStore().hashMessage(data)).toUpperCase();
104
131
  }
105
132
 
106
- hashBuffer()
107
-
108
-
109
- const verifySignature = () => {
110
- const public_key = PublicKey.from(actionDocumentData.value.document.public_key)
111
- const signature = Signature.from(actionDocumentData.value.document.signature)
112
- const hash = actionDocumentData.value.document.hash
113
- signature_verified.value = signature.verifyDigest(hash, public_key)
133
+ // Получение ФИО подписанта
134
+ const getSignerName = (signer: any) => {
135
+ if (!signer) return 'Неизвестный подписант';
136
+ return getNameFromUserData(signer) || signer;
114
137
  }
115
138
 
116
- verifySignature()
117
-
118
- // TODO удалить позже
119
- // использовали для отладки сверки. Позволяет скачать регенерированный документ после нажатия на кнопку сверки.
120
- // async function download2() {
121
- // // Преобразование base64 строки в Blob
122
- // console.log('regenerated: ', regenerated)
123
- // const binaryData = new Uint8Array(Object.values(regenerated.value.binary));
124
- // const blob = new Blob([binaryData], { type: 'application/pdf' });
125
-
126
- // // Создание временной ссылки для скачивания файла
127
- // const link = document.createElement('a');
128
- // link.href = URL.createObjectURL(blob);
129
- // link.download = regenerated.value.full_title ? regenerated.value.full_title : `${regenerated.value.meta.title} - ${regenerated.value.meta.username} - ${regenerated.value.meta.created_at}.pdf`;
130
-
131
- // // Имитация клика по ссылке для начала скачивания
132
- // document.body.appendChild(link);
133
- // link.click();
134
-
135
- // // Очистка после скачивания
136
- // document.body.removeChild(link);
137
- // URL.revokeObjectURL(link.href);
138
- // }
139
+ // Верификация всех подписей из агрегата
140
+ const verifySignatures = () => {
141
+ if (props.documentAggregate?.signatures?.length > 0) {
142
+ signatures_verified.value = props.documentAggregate.signatures.map(signatureData => {
143
+ try {
144
+ if (signatureData.public_key && signatureData.signature) {
145
+ const public_key = PublicKey.from(signatureData.public_key)
146
+ const signature = Signature.from(signatureData.signature)
147
+ const hash = doc.value.hash
148
+ const is_valid = signature.verifyDigest(hash, public_key)
149
+ return is_valid
150
+ } else {
151
+ return signatureData.is_valid
152
+ }
153
+ } catch (error) {
154
+ console.error('Ошибка при верификации подписи:', error)
155
+ return false
156
+ }
157
+ })
158
+ }
159
+ }
139
160
 
161
+ onMounted(() => {
162
+ hashBuffer()
163
+ verifySignatures()
164
+ })
140
165
 
141
166
  async function download() {
142
- // Преобразование base64 строки в Blob
143
- const response = await fetch(`data:application/pdf;base64,${doc.value.binary.toString()}`);
144
- const blob = await response.blob();
145
-
146
- // Создание временной ссылки для скачивания файла
147
- const link = document.createElement('a');
148
- link.href = URL.createObjectURL(blob);
149
- link.download = doc.value.full_title ? doc.value.full_title : `${doc.value.meta.title} - ${doc.value.meta.username} - ${doc.value.meta.created_at}.pdf`;
150
-
151
- // Имитация клика по ссылке для начала скачивания
152
- document.body.appendChild(link);
153
- link.click();
154
-
155
- // Очистка после скачивания
156
- document.body.removeChild(link);
157
- URL.revokeObjectURL(link.href);
167
+ try {
168
+ // PDF теперь в формате base64, можно использовать data URL
169
+ const link = document.createElement('a');
170
+ link.href = `data:application/pdf;base64,${doc.value.binary}`;
171
+ link.download = doc.value.full_title ? doc.value.full_title : `${doc.value.meta.title} - ${doc.value.meta.username} - ${doc.value.meta.created_at}.pdf`;
172
+
173
+ document.body.appendChild(link);
174
+ link.click();
175
+ document.body.removeChild(link);
176
+ } catch (error) {
177
+ console.error('Ошибка при скачивании файла:', error);
178
+ }
158
179
  }
159
180
 
181
+ // Вычисляем, есть ли хотя бы одна невалидная подпись
182
+ const hasInvalidSignature = computed(() => signatures_verified.value.some(v => v === false))
183
+
160
184
  </script>
161
185
  <style>
162
- .description table {
163
-
164
- }
165
186
 
166
187
  .description td {
167
188
  word-break: break-all !important;
@@ -187,6 +208,15 @@ async function download() {
187
208
  font-size: 10px !important;
188
209
  }
189
210
 
211
+ .signature-header {
212
+ font-size: 12px;
213
+ }
214
+
215
+ .signature-text {
216
+ font-size: 10px;
217
+ word-break: break-all;
218
+ }
219
+
190
220
  @media (min-width: 700px) {
191
221
  .dynamic-padding {
192
222
  padding: 50px !important;
@@ -194,7 +224,7 @@ async function download() {
194
224
  }
195
225
  @media (max-width: 700px) {
196
226
  .dynamic-padding {
197
- padding: 20px !important;
227
+ padding: 10px !important;
198
228
  }
199
229
  }
200
230
  </style>
@@ -20,6 +20,7 @@ import { computed, ref, onUnmounted } from 'vue'
20
20
  import config from 'src/app/config'
21
21
  import { useSessionStore } from 'src/entities/Session'
22
22
 
23
+ //TODO delete entity from here and make with props and subscription
23
24
  const session = useSessionStore()
24
25
 
25
26
  const intervalId = ref()
@@ -0,0 +1 @@
1
+ export { default as BlockchainStatusBar } from './BlockchainStatusBar.vue'
@@ -0,0 +1,61 @@
1
+ // Общие стили для карточек
2
+ .card-container {
3
+ border-radius: 16px;
4
+ width: 100%;
5
+ }
6
+
7
+ .info-card {
8
+ background-color: rgba(0, 0, 0, 0.03);
9
+ border-radius: 12px;
10
+ padding: 16px;
11
+ margin-bottom: 12px;
12
+ border: 1px solid rgba(0, 0, 0, 0.05);
13
+
14
+ .q-dark & {
15
+ background-color: rgba(255, 255, 255, 0.05);
16
+ border: 1px solid rgba(255, 255, 255, 0.08);
17
+ }
18
+
19
+ &.hover {
20
+ transition: all 0.2s ease;
21
+
22
+ &:hover {
23
+ background-color: rgba(0, 0, 0, 0.05);
24
+
25
+ .q-dark & {
26
+ background-color: rgba(255, 255, 255, 0.08);
27
+ }
28
+ }
29
+ }
30
+ }
31
+
32
+ .card-title {
33
+ font-size: 16px;
34
+ font-weight: 500;
35
+ color: rgba(0, 0, 0, 0.85);
36
+ margin-bottom: 12px;
37
+
38
+ .q-dark & {
39
+ color: rgba(255, 255, 255, 0.85);
40
+ }
41
+ }
42
+
43
+ .card-label {
44
+ font-size: 14px;
45
+ color: rgba(0, 0, 0, 0.6);
46
+ margin-bottom: 4px;
47
+
48
+ .q-dark & {
49
+ color: rgba(255, 255, 255, 0.6);
50
+ }
51
+ }
52
+
53
+ .card-value {
54
+ font-size: 16px;
55
+ font-weight: 500;
56
+ margin-bottom: 8px;
57
+ }
58
+
59
+ .card-action-btn {
60
+ border-radius: 8px;
61
+ }
@@ -0,0 +1,15 @@
1
+ <template lang="pug">
2
+ slot(v-if="isMounted")
3
+ template(v-else)
4
+ slot(name="fallback")
5
+ </template>
6
+
7
+ <script lang="ts" setup>
8
+ import { ref, onMounted } from 'vue'
9
+
10
+ const isMounted = ref(false)
11
+
12
+ onMounted(() => {
13
+ isMounted.value = true
14
+ })
15
+ </script>
@@ -0,0 +1 @@
1
+ export { default as ClientOnly } from './ClientOnly.vue';