2024-11-11 16:06:09 +02:00
|
|
|
<template>
|
2024-11-18 23:28:33 +02:00
|
|
|
<div class="max-w-lg mx-auto py-6 px-4 md:px-6">
|
|
|
|
|
<section class="content">
|
|
|
|
|
<div class="max-w-lg mx-auto py-8">
|
|
|
|
|
<!-- Секция выбора размещения -->
|
2024-11-19 15:33:56 +02:00
|
|
|
<CreateSection :isActive="activeSteps.includes('placement')">
|
|
|
|
|
<CreatePlacementSection v-model="placement" />
|
2024-11-18 23:28:33 +02:00
|
|
|
</CreateSection>
|
2024-11-18 18:26:28 +02:00
|
|
|
|
2024-11-18 23:28:33 +02:00
|
|
|
<!-- Секция выбора доступных действий -->
|
|
|
|
|
<CreateSection :isActive="activeSteps.includes('actions')">
|
2024-11-19 15:33:56 +02:00
|
|
|
<CreateActionsSection v-model="selectedActions" />
|
2024-11-18 23:28:33 +02:00
|
|
|
</CreateSection>
|
2024-11-18 18:26:28 +02:00
|
|
|
|
2024-11-18 23:28:33 +02:00
|
|
|
<!-- Секция выбора способа доставки -->
|
2024-11-19 15:33:56 +02:00
|
|
|
<CreateSection v-if="activeSteps.includes('delivery')" :isActive="true">
|
|
|
|
|
<CreateMessageDeliveryMethodSection v-model="messageDeliveryMethod" />
|
2024-11-18 23:28:33 +02:00
|
|
|
</CreateSection>
|
2024-11-18 18:26:28 +02:00
|
|
|
|
2024-11-18 23:28:33 +02:00
|
|
|
<!-- Секция сообщений для отправки -->
|
|
|
|
|
<CreateSection
|
2024-11-19 15:33:56 +02:00
|
|
|
v-if="activeSteps.includes('messages')"
|
2024-11-19 14:12:03 +02:00
|
|
|
:isActive="messageDeliveryMethod !== 'telegram'"
|
2024-11-18 23:28:33 +02:00
|
|
|
>
|
2024-11-19 15:33:56 +02:00
|
|
|
<CreateMessagesSection :placement="placement" v-model="messages" />
|
2024-11-18 23:28:33 +02:00
|
|
|
</CreateSection>
|
2024-11-18 18:26:28 +02:00
|
|
|
|
2024-11-18 23:28:33 +02:00
|
|
|
<!-- Секция итогового резюме -->
|
|
|
|
|
<CreateSection :isActive="activeSteps.includes('summary')">
|
|
|
|
|
<CreateSummarySection
|
|
|
|
|
:placement="placement"
|
|
|
|
|
:actions="selectedActions"
|
2024-11-19 14:12:03 +02:00
|
|
|
:messageDeliveryMethod="messageDeliveryMethod"
|
2024-11-18 23:28:33 +02:00
|
|
|
:predefinedMessage="selectedActions.includes('sendMessage') ? messages : undefined"
|
|
|
|
|
/>
|
|
|
|
|
</CreateSection>
|
2024-11-18 18:26:28 +02:00
|
|
|
|
2024-11-18 23:28:33 +02:00
|
|
|
<div class="h-[30dvh] md:h-[10dvh] overflow-hidden"></div>
|
|
|
|
|
</div>
|
|
|
|
|
</section>
|
2024-11-11 16:06:09 +02:00
|
|
|
</div>
|
|
|
|
|
</template>
|
2024-11-14 16:43:46 +02:00
|
|
|
|
2024-11-14 16:48:32 +02:00
|
|
|
<script setup lang="ts">
|
2024-11-19 15:33:56 +02:00
|
|
|
import { computed, ref } from 'vue'
|
2024-11-19 14:12:03 +02:00
|
|
|
import type { QRCodeDocument } from '@/types/DBDocumentTypes'
|
2024-11-14 16:43:46 +02:00
|
|
|
|
2024-11-19 15:33:56 +02:00
|
|
|
// Состояния шагов
|
|
|
|
|
const placement = ref<string | null>(null)
|
2024-11-18 18:26:28 +02:00
|
|
|
const selectedActions = ref<string[]>([])
|
2024-11-19 14:12:03 +02:00
|
|
|
const messageDeliveryMethod = ref<'' | QRCodeDocument['messageDeliveryMethod']>('')
|
2024-11-18 18:26:28 +02:00
|
|
|
const messages = ref<string[]>([])
|
2024-11-14 16:43:46 +02:00
|
|
|
|
2024-11-19 15:33:56 +02:00
|
|
|
// Функция для определения доступных шагов
|
|
|
|
|
const activeSteps = computed(() => {
|
|
|
|
|
const steps = ['placement', 'actions', 'delivery', 'messages', 'summary'] as const
|
|
|
|
|
const isStepValid = {
|
|
|
|
|
placement: !!placement.value,
|
|
|
|
|
actions: !!placement.value,
|
|
|
|
|
delivery:
|
|
|
|
|
!!placement.value &&
|
|
|
|
|
selectedActions.value.length > 0 &&
|
|
|
|
|
selectedActions.value.includes('sendMessage'),
|
|
|
|
|
messages:
|
|
|
|
|
!!messageDeliveryMethod.value && messageDeliveryMethod.value === 'webPushSubscription',
|
|
|
|
|
summary:
|
|
|
|
|
!!placement.value &&
|
|
|
|
|
selectedActions.value.length > 0 &&
|
|
|
|
|
(messageDeliveryMethod.value === 'webPushSubscription' ||
|
|
|
|
|
selectedActions.value.includes('viewContactInfo')),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const active = []
|
|
|
|
|
for (const step of steps) {
|
|
|
|
|
if (active.length === 0 || isStepValid[step]) {
|
|
|
|
|
active.push(step)
|
|
|
|
|
} else {
|
|
|
|
|
break
|
2024-11-18 18:26:28 +02:00
|
|
|
}
|
2024-11-19 15:33:56 +02:00
|
|
|
}
|
|
|
|
|
return active
|
|
|
|
|
})
|
2024-11-14 16:43:46 +02:00
|
|
|
</script>
|