+
+
+
+
+
+
+
+
+ {{ $t("sign.know") }}
+
+
+
+
+
+
+
+
+ {{ mn }}
+
+
+
+ {{ $t('sign.mnemonic') }}
+
+
+
+
+
+ {{ pk }}
+
+
+ {{ $t('sign.publicKey') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
-
{{ $t("sign.know") }}
+
+
+
diff --git a/src/pages/generateQr/GenerateQr.vue b/src/pages/generateQr/GenerateQr.vue
new file mode 100644
index 0000000..0d7de9e
--- /dev/null
+++ b/src/pages/generateQr/GenerateQr.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Scane address to receive payment
+
+ {{ user?.addr }}
+
+
Request payment
+
+
+
+
diff --git a/src/pages/sqanQr/ScanQr.vue b/src/pages/sqanQr/ScanQr.vue
new file mode 100644
index 0000000..f667fdc
--- /dev/null
+++ b/src/pages/sqanQr/ScanQr.vue
@@ -0,0 +1,307 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('buttons.reloadPage') }}
+
+
+
+ {{ $t('buttons.requestCameraAccess') }}
+
+
+
+
+
+
+
+
diff --git a/src/pages/sqanQr/modalErrorMessage.vue b/src/pages/sqanQr/modalErrorMessage.vue
new file mode 100644
index 0000000..e15bf16
--- /dev/null
+++ b/src/pages/sqanQr/modalErrorMessage.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ errMessage.header }}
+
+
+
+ {{ errMessage.text }}
+
+
+
+
diff --git a/src/pages/sqanQr/modalTx.vue b/src/pages/sqanQr/modalTx.vue
new file mode 100644
index 0000000..7799dc3
--- /dev/null
+++ b/src/pages/sqanQr/modalTx.vue
@@ -0,0 +1,30 @@
+
+
+
+
+ DEMO TRANSACTION
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/topUsers/TopUsersPage.vue b/src/pages/topUsers/TopUsersPage.vue
index 015003a..4a02066 100644
--- a/src/pages/topUsers/TopUsersPage.vue
+++ b/src/pages/topUsers/TopUsersPage.vue
@@ -3,13 +3,13 @@ import { ref } from 'vue'
import UserItem from './UserItem.vue'
const userItems = ref([
- { id: 1, nickName: 'Тазик Дёгтя', publicKey: 'Ae2tdPwUPEZ6TS3vvgTmvNUZcfr9JnfU1sTq5i5XorEFgH77tJcYP9BX55L', avatar: 'https://s3-alpha-sig.figma.com/img/caed/fd35/f35e2d51acb83d492cdd6f833093392c?Expires=1710115200&Key-Pair-Id=APKAQ4GOSFWCVNEHN3O4&Signature=cDGXOuLvb~4vM7tlVVrDmvuZgIZo0~h~3pTs5StFrGIUHFDm84vKoWmwHnIj-oEPV-G~5limhTT83kDNHbpTQLSoiIoAt91n1KvwkS2z~6TIj5gMH4xwhr5BewyzDB2E2A1IogAFSE2q1x2AYk-VpcthIZWlKL9E-ZlLm71zIFTKaQJhxIl~5bMtC5h8eFlXn3eb6PDxjtv~p6s61N5dMWmuTAiX27ZXRlwnm6MWJZRmE7Evvm3Fe21kPSIvpjsR2BXUM3C3i8lXN6jOyjxTkoBPnA~8zzOFMoSRZEq89ObVKNCuQlxcPUw8sF~MifCpVMo8fwiRs4BviqxYFoSk~A__', rank: '1' },
+ { id: 1, nickName: 'Тазик Дёгтя', publicKey: 'Ae2tdPwUPEZ6TS3vvgTmvNUZcfr9JnfU1sTq5i5XorEFgH77tJcYP9BX55L', avatar: 'https://static10.tgstat.ru/channels/_0/95/9599d12ba8791240e7a691f31ace35a6.jpg', rank: '1' },
{ id: 2, nickName: 'Вупсень', publicKey: '1sTq5i5XTS3vvgTAe2tdPwUPEZ6mvNUZcfr9JnfUorEFgH77tJcYP9BX55L', avatar: 'https://sun9-61.userapi.com/impg/QSHPcb-Be_JXX7E09ckyZC1QaUI9SVrdV7do-g/pA2hg43JTZg.jpg?size=1276x1280&quality=95&sign=c1a77bfb1439d0715541b5f508567ad2&c_uniq_tag=r9oFUCQ2oNoAU9iza9izH2BlA1JK062VgFQcebhSy1A&type=album', rank: '2' },
{ id: 3, nickName: 'Пупсень', publicKey: '9JnfU1PEZ6TS3vvgTmvNUZcfrsTq5iAe2tdPwU5XorEFgH77tJcYP9BX55L', avatar: 'https://kartinkof.club/uploads/posts/2023-05/1683383915_kartinkof-club-p-vupsen-kartinki-27.jpg', rank: '3' },
- { id: 4, nickName: 'Переносной гриль', publicKey: 'wUPEZ6TS3vvgTmvNUZcfr9JnfAe2tdPU1sTq5i5XorEFgH77tJcYP9BX55L', avatar: 'https://yt3.googleusercontent.com/vpuqGSejfwoBuzkPk-yWhZvkfmSYOITGXtpkL4oTMJIDi_2tlEYKcjF5ooIowscn7yeJpm1f=s900-c-k-c0x00ffffff-no-rj', rank: '4' },
+ { id: 4, nickName: 'Переносной гриль', publicKey: 'wUPEZ6TS3vvgTmvNUZcfr9JnfAe2tdPU1sTq5i5XorEFgH77tJcYP9BX55L', avatar: 'https://mykaleidoscope.ru/x/uploads/posts/2022-09/1663138463_42-mykaleidoscope-ru-p-veselii-samurai-krasivo-43.jpg', rank: '4' },
{ id: 5, nickName: 'Семен', publicKey: 'rEFgH77tJcYPAe2tdPwUPEZ6TS3vvgTmvNUZcfr9JnfU1sTq5i5Xo9BX55L', avatar: 'https://img.goodfon.ru/original/2048x2048/6/c5/zak-efron-aktere-paren-foto.jpg', rank: '5' },
- { id: 6, nickName: 'Сторож Совести', publicKey: 'nf2tdPwUPEZ6TS3vvgTmvNUZcfr9JU1sTq5i5XorEFgH77tJcAeYP9BX55L', avatar: 'https://s3-alpha-sig.figma.com/img/7a07/a920/115748a2208f913bb0e1847aa9b9daf8?Expires=1710115200&Key-Pair-Id=APKAQ4GOSFWCVNEHN3O4&Signature=EIxl9YQW6i11lZqKjRFbivwRtMlLAFR0rq1cGjDaLMQ2IMjDnxcJWfZqYWErmwWITQfTM2MD8NgRmGrgWMfiWcXU50PXaoqArPKxtoML~JqF9c4ZHobq9K~Dkt9gfnt9aZ64IfT-v1O3lJ36YHTH82wbBt0C~6iaoCT4CLccZwUwMFUOLOvy19ZPLA20zTQslFM620nEgBplo6vuA70dBfNtBCuSdFUdJiaEOabvda~Np2p1VBsCx4nf5J3v4GF2fCIzeJC4WwWHcw8d-V6f1BVzf1VZh46rTq4MkE80S23TgnVWH1YfLuE5gHL0XDtzqd4ADr~C32juUPjxAy~0hg__', rank: '6' },
- { id: 7, nickName: 'Vika', publicKey: '3vvgTmvNUAe2tdPwUPEZ6TSZcfr9JnfU1sTq5i5XorEFgH77tJcYP9BX55L', avatar: 'https://s3-alpha-sig.figma.com/img/31be/4e70/c81034cd57b4dcf8f41bebe70b816a49?Expires=1710115200&Key-Pair-Id=APKAQ4GOSFWCVNEHN3O4&Signature=egVtaBDb5XlkWppxqXpLIfM-ikdqdC5ajm9Xh9ApaB5XLIdBdkhnLnhASoAv0PD6kZzppDt1YUB-KII6oYbPjen6E6elmaXBFDfDDzfoZ~Em5vgHFS~75k1GFXpGsnStD9aY77I0NCPzfrfVxxdspWmB6d-WMazKA9mqI1i-UordY8kSrtRts5j8vR3yUF-KQc4tKFNv-6Sys1nwiO0XoVKTB6W-XfrH9qPqtqyLt1L93PTAZiCVblYvsGQXP5cntW1ANHxl7A93ryq3ZuMrr-tPiBOcXQQ2fOYSGCTVyYuQvHQW3QIn-bs9JypZqfVkDa8bnf80IZcjxTK5JwA31A__', rank: '7' }
+ { id: 6, nickName: 'Сторож Совести', publicKey: 'nf2tdPwUPEZ6TS3vvgTmvNUZcfr9JU1sTq5i5XorEFgH77tJcAeYP9BX55L', avatar: 'https://i.pinimg.com/736x/ba/33/ca/ba33caa17bcbae16ebb35514acf740bd.jpg', rank: '6' },
+ { id: 7, nickName: 'Vika', publicKey: '3vvgTmvNUAe2tdPwUPEZ6TSZcfr9JnfU1sTq5i5XorEFgH77tJcYP9BX55L', avatar: 'https://sun6-22.userapi.com/s/v1/if1/Kx0oxhQzfzd4-V1EiwtJIqbzg3r5IjfLnVnqkXOcbV02dLx9FlmKmxOiZaWhcEEJiCrttjZY.jpg?size=1600x1600&quality=96&crop=482,0,1600,1600&ava=1', rank: '7' }
])
diff --git a/src/pages/topUsers/UserItem.vue b/src/pages/topUsers/UserItem.vue
index c5689f6..be37c35 100644
--- a/src/pages/topUsers/UserItem.vue
+++ b/src/pages/topUsers/UserItem.vue
@@ -1,4 +1,4 @@
-
-
+
-
+
-
+
{{ user.rank }}
@@ -28,32 +28,34 @@ const getBadgeClasses = (value) => (
-
+ ">
{{ user.nickName }}
-
- {{ user.publicKey }}
-
+ ">
+ {{ user.publicKey }}
+
-
-
-
+
+
+
+
+
+
+
diff --git a/src/pages/topUsers/addFriend.js b/src/pages/topUsers/addFriend.js
new file mode 100644
index 0000000..6d6c116
--- /dev/null
+++ b/src/pages/topUsers/addFriend.js
@@ -0,0 +1,3 @@
+export default () => {
+ return true // temporary maintenance
+}
diff --git a/src/pages/topUsers/sendMessage.js b/src/pages/topUsers/sendMessage.js
new file mode 100644
index 0000000..6d6c116
--- /dev/null
+++ b/src/pages/topUsers/sendMessage.js
@@ -0,0 +1,3 @@
+export default () => {
+ return true // temporary maintenance
+}
diff --git a/src/pages/topUsers/transaction.js b/src/pages/topUsers/transaction.js
new file mode 100644
index 0000000..6d6c116
--- /dev/null
+++ b/src/pages/topUsers/transaction.js
@@ -0,0 +1,3 @@
+export default () => {
+ return true // temporary maintenance
+}
diff --git a/src/pages/user/UserProfile.vue b/src/pages/user/UserProfile.vue
index 955fcc2..072c870 100644
--- a/src/pages/user/UserProfile.vue
+++ b/src/pages/user/UserProfile.vue
@@ -1,13 +1,166 @@
+
+
+
+
+
+
+
+
+
+
{{ user.name }}
+
+
+
{{ user.addr }}
+
+
+
{{ user.desc }}
+
+
+
{{ user.sign }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/user/UserTx.vue b/src/pages/user/UserTx.vue
index b94f3b9..03b7476 100644
--- a/src/pages/user/UserTx.vue
+++ b/src/pages/user/UserTx.vue
@@ -1,142 +1,72 @@
-
+
+
diff --git a/src/router/routes.ts b/src/router/routes.ts
index d0b9009..2cfb841 100644
--- a/src/router/routes.ts
+++ b/src/router/routes.ts
@@ -9,13 +9,14 @@ const routes: RouteRecordRaw[] = [
{ path: 'contacts', component: () => import('pages/ContactsPage.vue') },
{ path: 'sign', component: () => import('pages/SignUp.vue') },
{ path: 'remember', component: () => import('pages/RestoreFromMnemonic.vue') },
- { path: 'qr', component: () => import('src/pages/ScanQr.vue') },
+ { path: 'qr', component: () => import('src/pages/sqanQr/ScanQr.vue') },
{ path: 'help', component: () => import('src/pages/HelpPage.vue') },
{ path: 'global', component: () => import('src/pages/TxGlobal.vue') },
{ path: 'myqr', component: () => import('src/pages/user/UserQR.vue') },
{ path: 'friends', component: () => import('src/pages/user/UserFriends.vue') },
{ path: 'tx', component: () => import('src/pages/user/UserTx.vue') },
{ path: 'profile', component: () => import('src/pages/user/UserProfile.vue') },
+ { path: 'generateQr', component: () => import('src/pages/generateQr/GenerateQr.vue') },
{ path: 'receive', component: () => import('src/pages/user/UserReceive.vue') },
{ path: 'crypto', component: () => import('src/pages/user/UserCrypto.vue') },
{ path: 'ask', component: () => import('src/pages/landing/AskPage.vue') },
diff --git a/src/stores/contact.ts b/src/stores/contact.ts
new file mode 100644
index 0000000..8e0ea43
--- /dev/null
+++ b/src/stores/contact.ts
@@ -0,0 +1,47 @@
+import { defineStore } from 'pinia'
+import { ComponentInternalInstance, getCurrentInstance } from 'vue'
+
+export const contactStore = defineStore('contact', () => {
+ const vm = getCurrentInstance()
+ const { $db } = (vm as ComponentInternalInstance).appContext.config.globalProperties
+
+ async function getContacts () {
+ return await $db.getContacts()
+ }
+
+ async function findContact (name:string) {
+ return await $db.getContactsByName(name)
+ }
+
+ async function setContacts (contacts: { name: string, addr: string, id: number }[]) {
+ const errors = []
+
+ for (const contact of contacts) {
+ const { name, addr } = contact
+ const res = await addContact(name, addr)
+ if (typeof res === 'string') errors.push(res)
+ }
+
+ return errors
+ }
+
+ async function addContact (name: string, addr: string) {
+ const hasContact = await $db.hasContact(name, addr)
+ if (hasContact) {
+ return `Контакт ${name} с таким именем или адресом (${addr}) уже существует`
+ }
+ return await $db.addContact({ name, addr })
+ }
+
+ async function changeContact (contact:{ name: string, addr: string, id: number }) {
+ console.log(contact)
+
+ return await $db.set('contacts', contact)
+ }
+
+ async function deleteContact (id: number) {
+ return await $db.deleteContact(id)
+ }
+
+ return { getContacts, addContact, deleteContact, setContacts, findContact, changeContact }
+})
diff --git a/src/stores/user.ts b/src/stores/user.ts
index e8a6ff6..2dcaf49 100644
--- a/src/stores/user.ts
+++ b/src/stores/user.ts
@@ -1,6 +1,6 @@
import { defineStore } from 'pinia'
import { ref } from 'vue'
-import db from 'boot/db'
+import { db } from 'boot/db'
// TODO: !!STATE!!
export const userStore = defineStore('user', () => {