@@ -16,12 +16,14 @@ watch(
|
|||||||
() => sectionRef.value && props.isNextActiveSection,
|
() => sectionRef.value && props.isNextActiveSection,
|
||||||
(isNextActiveSection) => {
|
(isNextActiveSection) => {
|
||||||
if (isNextActiveSection) {
|
if (isNextActiveSection) {
|
||||||
|
sectionRef.value?.scrollIntoView({ behavior: 'smooth', block: 'center' })
|
||||||
|
|
||||||
const input = sectionRef.value?.querySelector('input[type="text"]')
|
const input = sectionRef.value?.querySelector('input[type="text"]')
|
||||||
if (input instanceof HTMLInputElement) {
|
if (input instanceof HTMLInputElement) {
|
||||||
|
setTimeout(() => {
|
||||||
input.focus()
|
input.focus()
|
||||||
|
}, 200)
|
||||||
}
|
}
|
||||||
|
|
||||||
sectionRef.value?.scrollIntoView({ behavior: 'smooth' })
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ immediate: true },
|
{ immediate: true },
|
||||||
|
|||||||
@@ -12,7 +12,9 @@
|
|||||||
<!-- class="p-button-outlined p-button-sm"-->
|
<!-- class="p-button-outlined p-button-sm"-->
|
||||||
<!-- />-->
|
<!-- />-->
|
||||||
</div>
|
</div>
|
||||||
<div class="text-gray-500">Создано: {{ formatedCreatedAt }}</div>
|
<div class="text-gray-500">
|
||||||
|
Создан: <span class="text-nowrap">{{ formatedCreatedAt }}</span>
|
||||||
|
</div>
|
||||||
</RouterLink>
|
</RouterLink>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="grid h-full sm:grid-rows-[auto_1fr_auto] grid-rows-[1fr_auto_auto] overflow-hidden">
|
<div class="grid h-full sm:grid-rows-[auto_1fr_auto] grid-rows-[1fr_auto_auto] overflow-hidden">
|
||||||
<div
|
<div class="flex overflow-auto pb-safe-or-4 sm:pt-safe w-full px-4 touch-pan-y">
|
||||||
class="flex flex-1 overflow-auto pb-safe-or-4 sm:pt-safe sm:max-w-prose mx-auto w-full px-4 touch-pan-y"
|
<div class="sm:max-w-prose grid grid-cols-1 mx-auto my-5">
|
||||||
>
|
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<slot name="footer">
|
<slot name="footer">
|
||||||
<footer
|
<footer
|
||||||
@@ -29,11 +29,11 @@ const slots = defineSlots<{
|
|||||||
default?: () => void
|
default?: () => void
|
||||||
footer?: () => void
|
footer?: () => void
|
||||||
}>()
|
}>()
|
||||||
</script>
|
|
||||||
|
|
||||||
<style>
|
const layoutPageHead = useHead({
|
||||||
html,
|
htmlAttrs: { class: 'overflow-hidden' },
|
||||||
body {
|
bodyAttrs: { class: 'overflow-hidden' },
|
||||||
overflow: hidden;
|
})
|
||||||
}
|
|
||||||
</style>
|
onBeforeUnmount(() => layoutPageHead?.dispose())
|
||||||
|
</script>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const routes = [
|
|||||||
name: ROUTE_NAMES.HOME,
|
name: ROUTE_NAMES.HOME,
|
||||||
component: () =>
|
component: () =>
|
||||||
isRunningStandalone()
|
isRunningStandalone()
|
||||||
? import('@/views/ManageQRCodesView.vue')
|
? import('@/views/manage/ManageQRCodesView.vue')
|
||||||
: import('@/views/HomeView.vue'),
|
: import('@/views/HomeView.vue'),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -22,37 +22,37 @@ const routes = [
|
|||||||
{
|
{
|
||||||
path: '/manage',
|
path: '/manage',
|
||||||
name: ROUTE_NAMES.MANAGE_DASHBOARD_QR_CODES,
|
name: ROUTE_NAMES.MANAGE_DASHBOARD_QR_CODES,
|
||||||
component: () => import('@/views/ManageQRCodesView.vue'),
|
component: () => import('@/views/manage/ManageQRCodesView.vue'),
|
||||||
props: true,
|
props: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/manage/qr',
|
path: '/manage/qr',
|
||||||
name: ROUTE_NAMES.MANAGE_DASHBOARD_QR,
|
name: ROUTE_NAMES.MANAGE_DASHBOARD_QR,
|
||||||
component: () => import('@/views/ManageQRCodesView.vue'),
|
component: () => import('@/views/manage/ManageQRCodesView.vue'),
|
||||||
props: true,
|
props: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/manage/chats',
|
path: '/manage/chats',
|
||||||
name: ROUTE_NAMES.MANAGE_DASHBOARD_CHATS,
|
name: ROUTE_NAMES.MANAGE_DASHBOARD_CHATS,
|
||||||
component: () => import('@/views/ManageChatsView.vue'),
|
component: () => import('@/views/manage/ManageChatsView.vue'),
|
||||||
props: true,
|
props: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/manage/qr/:qr_code_uri',
|
path: '/manage/qr/:qr_code_uri',
|
||||||
name: ROUTE_NAMES.MANAGE_QR_CODE,
|
name: ROUTE_NAMES.MANAGE_QR_CODE,
|
||||||
component: () => import('@/views/ManageQRCodeView.vue'),
|
component: () => import('@/views/manage/ManageQRCodeView.vue'),
|
||||||
props: true,
|
props: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/manage/qr/:qr_code_uri/ready',
|
path: '/manage/qr/:qr_code_uri/ready',
|
||||||
name: ROUTE_NAMES.MANAGE_QR_CODE_READY,
|
name: ROUTE_NAMES.MANAGE_QR_CODE_READY,
|
||||||
component: () => import('@/views/ManageQRCodeReadyView.vue'),
|
component: () => import('@/views/manage/ManageQRCodeReadyView.vue'),
|
||||||
props: true,
|
props: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/manage/qr/:qr_code_uri/chat/:chat',
|
path: '/manage/qr/:qr_code_uri/chat/:chat',
|
||||||
name: ROUTE_NAMES.MANAGE_QR_CODE_CHAT,
|
name: ROUTE_NAMES.MANAGE_QR_CODE_CHAT,
|
||||||
component: () => import('@/views/ManageQRCodeChatView.vue'),
|
component: () => import('@/views/manage/ManageQRCodeChatView.vue'),
|
||||||
props: true,
|
props: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ const {
|
|||||||
} = useMutation({
|
} = useMutation({
|
||||||
mutationKey: ['createQrCode'],
|
mutationKey: ['createQrCode'],
|
||||||
mutationFn: async () => {
|
mutationFn: async () => {
|
||||||
|
throw new Error('wtf')
|
||||||
const qrCodeDocument = await createQrCodeDocument({
|
const qrCodeDocument = await createQrCodeDocument({
|
||||||
name: name.value,
|
name: name.value,
|
||||||
placement: placement.value!,
|
placement: placement.value!,
|
||||||
|
|||||||
+2
-5
@@ -15,11 +15,8 @@
|
|||||||
class="flex flex-col gap-5 my-4 grid grid-cols-1 sm:grid-cols-3 gap-4"
|
class="flex flex-col gap-5 my-4 grid grid-cols-1 sm:grid-cols-3 gap-4"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div
|
<div v-else class="place-self-center">
|
||||||
v-else
|
<h1 class="text-2xl font-bold mb-4 text-gray-500">Страница в разработке</h1>
|
||||||
class="flex-1 flex flex-col items-center place-self-center text-center text-gray-500"
|
|
||||||
>
|
|
||||||
<h1 class="text-2xl font-bold mb-4 text-center sm:text-left">Страница в разработке</h1>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
+1
-1
@@ -9,7 +9,7 @@
|
|||||||
content="Просматривайте и управляйте сообщениями, отправленными через ваш QR-код. Полная конфиденциальность и удобный интерфейс чата"
|
content="Просматривайте и управляйте сообщениями, отправленными через ваш QR-код. Полная конфиденциальность и удобный интерфейс чата"
|
||||||
/>
|
/>
|
||||||
</MetaHead>
|
</MetaHead>
|
||||||
<div class="bg-white p-6 rounded-lg shadow-md my-5">
|
<div class="">
|
||||||
<div class="flex items-center justify-between mb-4">
|
<div class="flex items-center justify-between mb-4">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<QRCodePlacementIcon :placement="qrCodeDoc.placement" />
|
<QRCodePlacementIcon :placement="qrCodeDoc.placement" />
|
||||||
+1
-1
@@ -11,7 +11,7 @@
|
|||||||
<QueryRender :query="query">
|
<QueryRender :query="query">
|
||||||
<template #default="{ data }">
|
<template #default="{ data }">
|
||||||
<div
|
<div
|
||||||
class="flex-1 grid grid-cols-2 sm:grid-cols-3 gap-5 my-5 place-content-center sm:place-content-start justify-items-center"
|
class="flex-1 grid grid-cols-2 sm:grid-cols-3 gap-5 place-self-center sm:place-self-start"
|
||||||
v-if="data.rows.length > 0"
|
v-if="data.rows.length > 0"
|
||||||
>
|
>
|
||||||
<QRCodeCard v-for="{ doc: qrCode } in data.rows" :key="qrCode!.uri" :qrCode="qrCode!" />
|
<QRCodeCard v-for="{ doc: qrCode } in data.rows" :key="qrCode!.uri" :qrCode="qrCode!" />
|
||||||
Reference in New Issue
Block a user